Es sendet einmalig $ broadcast vom rootScope, der Listener ($ on) wird jedoch zweimal aufgerufen.
Der Listener befindet sich in einem Controller und verwendet $rootScope.$on
anstelle von $scope.$on
. Hat jemand dieses Problem gehabt?
bearbeiten
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
anderer Controller:
$rootScope.$on('menuActivateActionPublish', function(event) {});
Da Sie Ihren $ on Listener auf $ rootScope registrieren, wird er nicht mit dem Controller zerstört. Wenn Sie den Controller das nächste Mal starten, wird er erneut erstellt.
Sie sollten Ihren Listener im Controller-Bereich erstellen
$scope.$on('menuActivateActionPublish', function(event) {});
Seien Sie vorsichtig, Sie vermeiden zwei Instanzen des Controllers, dh zwei Ereignis-Listener. Das bedeutet, dass die Methode zweimal ausgeführt wird. (Beispiel: zweimal 'ng-controller' verwenden)
Um die Antwort von que1326 zu ergänzen, zum Beispiel, wenn Sie einen ui-router verwenden und so etwas haben
.state('app.yourpage', {
url:'yourPage',
views: {
'[email protected]': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
und in yourPage.html haben Sie einen ng-controller="YourController as Ctrl"
, dann erstellen Sie zwei Instanzen des Controllers: Eine Instanz wird durch die Statuskonfiguration und eine weitere in Ihrer HTML-Datei erstellt.
Die einzige Lösung, mit der ich arbeiten konnte, bestand darin, den Listener innerhalb des $ viewContentLoaded-Ereignisses zu erstellen:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});