Ответ 1
Как оказалось, несколько контроллеров были созданы из-за объявления ng-controller
в html, а также как часть настройки состояния для ui-router
.
Решение состоит в том, чтобы удалить одно из объявлений.
Продвижение события при нажатии кнопки: -
$scope.onButtonClick = function(){
$rootScope.$broadcast('onButtonClick');
}
И событие catching в другом контроллере: -
$rootScope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
Но он попал дважды, хотя он срабатывал только один раз. Почему это?
Как оказалось, несколько контроллеров были созданы из-за объявления ng-controller
в html, а также как часть настройки состояния для ui-router
.
Решение состоит в том, чтобы удалить одно из объявлений.
Если вы передаете событие на $rootScope
, вы можете поймать событие на каждом контроллере $scope
.
IMO, вы не должны улавливать событие на $rootScope
.
$scope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
Я создал демонстрацию plunker, которая показывает, что она работает точно так, как ожидалось. Plunker
Возможно, у вас есть несколько экземпляров одного и того же контроллера, где вы поймаете событие. Пожалуйста, проверьте это, как предложил Чандермани.
Angular $rootScope.$broadcast()
событие, дважды попавшее в контроллер
$scope.$on('saveCancelLeadInfo', function (event, args) {
if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
$scope.$$listenerCount["saveCancelLeadInfo"] = 0;
}
your code here
});