web-dev-qa-db-fra.com

Angular $ rootScope. $ Broadcast () événement pris deux fois dans le contrôleur

Événement de diffusion sur le bouton, cliquez sur: -

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

Et attraper un événement dans un autre contrôleur: -

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

Mais il a attrapé deux fois même s'il n'a tiré qu'une seule fois. Pourquoi donc?

25
Pratibha

Il s'est avéré que les contrôleurs multiples ont été instanciés en raison de ng-controller déclaration en html et également dans le cadre de la configuration de l'état pour ui-router.

La solution consiste à supprimer l'une des déclarations.

41
Chandermani

Si vous diffusez un événement sur $rootScope, vous pouvez attraper l'événement sur chaque contrôleur $scope. OMI, vous ne devez pas attraper l'événement sur le $rootScope.

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

J'ai créé une vitrine plunker, qui montre que cela fonctionne exactement comme prévu. Plunker

Il est possible que vous ayez plusieurs instances du même contrôleur, où vous interceptez l'événement. Veuillez vérifier cela comme Chandermani l'a suggéré.

10
Johannes

Angulaire $rootScope.$broadcast() événement pris deux fois dans le contrôleur

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