要するに:
AngularJS Web ページで jQuery をトリガーして、再生ボタンと対応する画像をフェードアウトさせるコントローラーがあります。ただし、URL が変更されると、コントローラーは後続のページで機能しなくなります。動的 URL を使用しているため、コントローラーが壊れていると思います。
詳細
ウェブサイト アプリの各ページに 1 つずつコントローラーを配置することで、コントローラーを整理しました。ここで、私のルートがどのように設定されているかを見ることができます:
angular.module('100_Ages', ['mydirectives', 'ngResponsiveImages']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/100_Ages', {templateUrl: 'partials/splash.html', controller: SplashCtrl}).
when('/100_Ages/nav', {templateUrl: 'partials/nav.html', controller: NavCtrl}).
when('/100_Ages/about', {templateUrl: 'partials/person-list.html', controller: AboutCtrl}).
when('/100_Ages/0', {templateUrl: 'partials/splash.html', controller: SplashCtrl}).
when('/100_Ages/:personId', {templateUrl: 'partials/person.html', controller: DetailCtrl}).
otherwise({redirectTo: '/100_Ages'});
}]);
そして、問題のコントローラーは次のとおりです。
function DetailCtrl($scope, $routeParams, $http) {
// Pull down a JSON file with my data to populate Angular template
$http.get('person.json').success(function(data) {
// matches person's id to route.
angular.forEach(data, function(person) {
if (person.id == $routeParams.personId)
$scope.person = person;
});
});
// start of attempt to integrate button click functionality.
$scope.$on('$routeChangeSuccess', function(){
$.noConflict();
jQuery(function(){
jQuery("#playButton").click(function(){
jQuery("#person_photo").fadeOut('9000');
jQuery("#playButton").fadeOut('9000');
jQuery("#player").fadeIn('9000');
});
});
});
}
ここで jQuery を使用しているのは、Angular でこれを行う方法がまったくわからなかったためです。とにかく、ページを更新してボタン画像をクリックすると機能します。しかし、ルートを「1」ずつインクリメントして、アプリの次のページに移動する「次へ」リンクがあります (100 人のリストで、各ページに 1 人ずつ)。
このリンクを使用して別のページに移動すると、jQuery が機能しなくなります。これは、URL が変更されているにもかかわらず、ルートが変更されていないためだと推測しています。とにかく、これを動的ルートで機能させるには?ありがとう。