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;