entre - eventos en angularjs
El evento $ rootScope. $ Broadcast() se capturó dos veces en el controlador (3)
Broadcating evento en el botón de clic: -
$scope.onButtonClick = function(){
$rootScope.$broadcast(''onButtonClick'');
}
Y atrapando el evento en otro controlador: -
$rootScope.$on(''onButtonClick'',function(event){
alert("catched");
console.log(event);
});
Pero atrapó dos veces aunque disparó solo una vez. ¿Porqué es eso?
El $rootScope.$broadcast()
se capturó dos veces en el controlador
$scope.$on(''saveCancelLeadInfo'', function (event, args) {
if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
$scope.$$listenerCount["saveCancelLeadInfo"] = 0;
}
your code here
});
Resultó que los controladores múltiples fueron instanciados debido a la declaración del ng-controller
en html y también como parte de la configuración de estado para ui-router
.
La solución es eliminar una de las declaraciones.
Si transmite un evento en $rootScope
, puede detectar el evento en cada controlador $scope
. En mi opinión, no debería capturar el evento en el $rootScope
.
$scope.$on(''onButtonClick'',function(event){
alert("catched");
console.log(event);
});
He creado un escaparate plunker, que muestra que funciona exactamente como se esperaba. Plunker
Podría ser posible que tenga varias instancias del mismo controlador, donde detecte el evento. Por favor verifica esto como sugirió Chandermani.