Подтвердить что ты не робот

Angular $rootScope. Событие $broadcast() дважды попадает в контроллер

Продвижение события при нажатии кнопки: -

$scope.onButtonClick = function(){
    $rootScope.$broadcast('onButtonClick');
}

И событие catching в другом контроллере: -

$rootScope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

Но он попал дважды, хотя он срабатывал только один раз. Почему это?

4b9b3361

Ответ 1

Как оказалось, несколько контроллеров были созданы из-за объявления ng-controller в html, а также как часть настройки состояния для ui-router.

Решение состоит в том, чтобы удалить одно из объявлений.

Ответ 2

Если вы передаете событие на $rootScope, вы можете поймать событие на каждом контроллере $scope. IMO, вы не должны улавливать событие на $rootScope.

$scope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

Я создал демонстрацию plunker, которая показывает, что она работает точно так, как ожидалось. Plunker

Возможно, у вас есть несколько экземпляров одного и того же контроллера, где вы поймаете событие. Пожалуйста, проверьте это, как предложил Чандермани.

Ответ 3

Angular $rootScope.$broadcast() событие, дважды попавшее в контроллер

$scope.$on('saveCancelLeadInfo', function (event, args) {
    if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
        $scope.$$listenerCount["saveCancelLeadInfo"] = 0;
    }
    your code here
});