2014-09-11 24 views
24

evento Broadcating su scatto del tasto: -

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

e la cattura di evento in un altro controllore: -

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

Ma catturato due volte, anche anche se ha sparato solo una volta. Perché?

+5

Molto probabilmente due istanze del controllo sono attivi. Una ragione comune è l'uso del controller '$ routeProvider' e' ng-controller' nella stessa vista. – Chandermani

+0

quindi come risolverlo? Potete per favore aiutarmi? – Pratibha

+0

Avete il vostro controller istanziato in vista con ng-controller come suggerito da Chandermani? In tal caso, rimuovere l'attributo ng-controller. L'istanziazione del controller con ng-controller, uirouter e ngRouter è una o l'altra scelta. Se istanziate il controller due volte, ne avrete due istanze. – Martin

risposta

39

Come si è scoperto, i controller multipli sono stati istanziati a causa della dichiarazione ng-controller in html e anche come parte della configurazione dello stato per ui-router.

La soluzione è rimuovere una delle dichiarazioni.

+1

rimossa la dichiarazione del controller ng in html poiché l'ho già aggiunta come configurazione di stato nel router. Le cose funzionano bene ora. Grazie! –

9

Se si trasmette un evento su $rootScope, è possibile rilevare l'evento su ciascun controller $scope. IMO non si dovrebbe prendere l'evento sul $rootScope.

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

Ho creato una vetrina plunker, che mostra che funziona esattamente come previsto. Plunker

Potrebbe essere possibile avere più istanze dello stesso controller, in cui viene rilevato l'evento. Per favore controlla questo come suggerito da Chandermani.

+0

ancora catturato due volte ... – Pratibha

+0

@ user59442: La tua prima affermazione è valida e buono per un commento. Ma la tua ultima affermazione è sbagliata. Questa non è una risposta. – gkalpak

+0

significa, non l'ho capito ??? quale affermazione? – Pratibha

4

angolare $rootScope.$broadcast() evento catturato due volte controller

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

questo mi ha aiutato. – MilesStanfield