Angularjs обнаруживает routeChangeStart из директивы внутри шаблона

У меня есть довольно стандартная директива, которая живет в элементе привязки, которая анализирует строку, чтобы увидеть, соответствует ли текущий маршрут этой ссылке, например.

<a href="/dashboard" data-nav-item="dashboard">Dashboard</a>

Эта директива запускается каждый раз при изменении маршрута (поскольку ссылки могут жить за пределами ng-представления, которое изменяется, поэтому их состояние необходимо обновлять при изменении маршрута), используя $routeChangeStart. Это прекрасно работает в моей основной навигации, которая находится в стандартном представлении, но если я использую эту директиву в файле, включенном в ng (например, в моих поднавигациях), он не сможет запустить какой-либо код внутри обратного вызова routeChangeStart. Вместо этого я попытался внедрить $rootScope, но это не имеет значения. Директива выглядит следующим образом:

angular.module('myApp').directive('navItem', ['$rootScope','$location', function ($rootScope, $location) {
   return {
       restrict: 'A',
       scope: false,
       link: function postLink(scope, element, attrs) {
           console.log('All directive elements execute this!');
           $rootScope.$on('$routeChangeStart', function() {
               console.log('ng-included elements work execute this!');
           });
       }
    }
}]);

Как я могу получить доступ к этому событию из директивы в шаблоне ng-include? Директива запускается, но просто не подхватывает это.

Спасибо


person Dan Sunderland    schedule 10.07.2014    source источник


Ответы (1)


Я пытался воссоздать это на плункере, но у меня это работает

http://plnkr.co/edit/9hbTLxGjoTNsM44zq6rw?p=preview

app.directive('navItem', ['$rootScope','$location', function ($rootScope, $location) {
   return {
       restrict: 'A',
       scope: false,
       link: function postLink(scope, element, attrs) {
           console.log('All directive elements execute this!');
           $rootScope.$on('$routeChangeStart', function() {
               console.log('ng-included elements work execute this!');
           });
       }
    }
}]);

проверьте мой плункер, возможно, вы сможете найти разницу между вашим и моим кодом

person maurycy    schedule 10.07.2014
comment
Странно, сегодня еще раз посмотрю и посмотрю, смогу ли я найти какие-либо различия. - person Dan Sunderland; 14.07.2014