16

Invia $ broadcast una volta da rootScope, ma il listener ($ on) viene chiamato due volte.

L'ascoltatore si trova in un controller e utilizza $rootScope.$on anziché $scope.$on. Qualcuno ha avuto questo problema?

modificare

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args); 

altro controller:

$rootScope.$on('menuActivateActionPublish', function(event) {}); 
+2

dovresti fornire il tuo codice – Grundy

+2

Forse hai due controller? – kaaposc

+1

Probabilmente devi rimuovere l'ascoltatore quando il controller viene distrutto. Registrerei anche l'ascoltatore nella fase '.run' e non nel controller - per evitare che il controller dovesse registrare solo l'ascoltatore acceso è il proprio scope – Michael

risposta

20

Dal momento che si registra il $ su ascoltatore su $ rootScope, non ottiene distrutto con il controller e la volta successiva che avvii il controller, verrà creato di nuovo.

è necessario creare il vostro ascoltatore sul nell'ambito del controllore

$scope.$on('menuActivateActionPublish', function(event) {}); 
+0

Hey nel mio caso su listen chiamato in modo incrementale. –

+1

@UmairKhanzada scusa Non capisco quel commento – Tom

+0

ascolto '$ rootScope. $ Broadcast ('xyz');' evento quando l'utente effettua il login e quando l'utente si disconnette e accederà nuovamente ascolterà in modo incrementale. ascolta la funzione '$ rootScope. $ on ('xyz', function() {console.log ('running')});' –

4

Fare attenzione a evitare due istanze del controller significa due listener di eventi, il che significa che il metodo viene eseguito due volte !! (Esempio: usando due volte 'ng-regolatore')

1

Per completare que1326 risposta, ad esempio, se si sta utilizzando ui-router e avere qualcosa di simile

.state('app.yourpage', { 
      url:'yourPage', 
      views: { 
       '[email protected]': { 
        templateUrl : 'views/yourPage.html', 
        controller : 'YourController' 
       } 
      } 
     }) 

e in yourPage.html si dispone di un ng-controller="YourController as Ctrl", quindi si creano 2 istanze del controller: 1 istanza viene creata dalla configurazione dello stato e un'altra in html.

Problemi correlati