É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?
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.
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é.
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
});