Angularjs $ транслируется один раз, $ на два раза
Он передает $broadcast один раз из rootScope, но слушатель ($on) вызывается дважды.
Слушатель находится в контроллере и использует $rootScope.$on
вместо $scope.$on
, У кого-нибудь была эта проблема?
редактировать
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
другой контроллер:
$rootScope.$on('menuActivateActionPublish', function(event) {});
4 ответа
Поскольку вы регистрируете свой $ на слушателе в $rootScope, он не уничтожается контроллером, и в следующий раз, когда вы запускаете контроллер, он снова создается.
Вы должны создать свой слушатель в области видимости контроллера
$scope.$on('menuActivateActionPublish', function(event) {});
Будьте осторожны, чтобы избежать двух экземпляров контроллера, значит два слушателя событий, что означает, что метод выполняется дважды!! (пример: использование дважды 'ng-controller')
Чтобы дополнить que1326, ответьте, например, если вы используете ui-router и имеете что-то вроде
.state('app.yourpage', {
url:'yourPage',
views: {
'content@': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
и в yourPage.html у вас есть ng-controller="YourController as Ctrl"
Затем вы создаете 2 экземпляра контроллера: 1 экземпляр создается конфигурацией состояния, а другой - в вашем html.
Единственное решение, которое я смог получить, - создать прослушиватель внутри события $viewContentLoaded:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});