Angularjs $передается один раз, $в два раза

Он отправляет $broadcast один раз из rootScope, но прослушиватель ($ on) вызывается дважды.

Слушатель находится в контроллере и использует $rootScope.$on вместо $scope.$on. У кого-то была эта проблема?

изменить

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);

другой контроллер:

$rootScope.$on('menuActivateActionPublish', function(event) {});

Ответы

Ответ 1

Поскольку вы регистрируете свой $on listener на $rootScope, он не уничтожается с контроллером, и в следующий раз, когда вы запустите контроллер, он будет создан снова.

Вы должны создать своего слушателя в области управления

$scope.$on('menuActivateActionPublish', function(event) {});

Ответ 2

Будьте осторожны, вы избегаете двух экземпляров контроллера - это два прослушивателя событий, что означает, что метод запускается дважды! (пример: использование дважды "ng-controller" )

Ответ 3

Чтобы дополнить que1326, ответьте, например, если вы используете ui-router и у вас есть что-то вроде

.state('app.yourpage', {
            url:'yourPage',
            views: {
                '[email protected]': {
                    templateUrl : 'views/yourPage.html',
                    controller  : 'YourController'
                }
            }
        })

и в yourPage.html у вас есть ng-controller="YourController as Ctrl", затем вы создаете 2 экземпляра контроллера: 1 экземпляр создается конфигурацией состояния, а другой - в html.

Ответ 4

Единственное решение, которое я смог получить, - создать прослушиватель внутри события $ viewContentLoaded:

$scope.$on('$viewContentLoaded', function() {
  //Put your listener(s) in here
  $scope.$on('menuActivateActionPublish', function(event) {});
});

Ответ 5

Этот код работает для меня:

$rootScope.$$listeners.nameOfYourEvent.length = 1;