16

Es sendet $ broadcast einmal vom rootScope, aber der Listener ($ on) wird zweimal aufgerufen.

Der Listener befindet sich in einem Controller und verwendet $rootScope.$on anstelle von $scope.$on. Hat jemand dieses Problem?

bearbeiten

rootScope:

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

anderen Controller:

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

sollten Sie Ihren Code – Grundy

+2

bereitstellen Vielleicht haben Sie zwei Controller? – kaaposc

+1

Wahrscheinlich müssen Sie den Listener entfernen, wenn der Controller zerstört wird. Ich würde sogar den Listener in der '.run' Phase und nicht im Controller registrieren - um solche Probleme zu vermeiden, sollte der Controller nur Listener auf seinen eigenen Bereich registrieren. – Michael

Antwort

20

Da Sie Ihre $ auf Zuhörer auf $ rootScope registrieren, ist es nicht mit dem Controller zerstört werden und wenn Sie das nächste Mal den Controller starten, wird es erneut erstellt.

Sie sollten Ihre Zuhörer auf Steuerungsbereich

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

Hey in meinem Fall auf hören inkrementell aufgerufen. –

+1

@UmairKhanzada Sorry, ich verstehe diesen Kommentar nicht – Tom

+0

hören '$ rootScope. $ broadcast ('xyz');' Ereignis, wenn Benutzer anmelden und wenn Benutzer abmelden und erneut anmelden wird es inkrementell zu hören sein. hoeren Sie die Funktion '$ rootScope. $ on ('xyz', function() {console.log ('running')});' –

4

Vorsicht vermeiden Sie zwei Instanzen der Steuereinrichtung zwei Ereignis-Listener erstellen, die die Methode bedeutet, wird zweimal ausgeführt !! (Beispiel: mit zweimal 'ng-Controller')

1

Um que1326 Antwort, als Beispiel zu ergänzen, wenn Sie ui-Router verwenden und haben so etwas wie

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

und in yourPage.html Sie haben eine ng-controller="YourController as Ctrl", dann erstellen Sie 2 Instanzen des Controllers: 1 Instanz wird von der Statuskonfiguration und eine andere in Ihrem HTML erstellt.

Verwandte Themen