Il envoie $ broadcast une fois à partir de rootScope, mais l'auditeur ($ on) est appelé deux fois.
L'écouteur est dans un contrôleur et utilise $rootScope.$on
au lieu de $scope.$on
. Quelqu'un a-t-il eu ce problème?
modifier
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
autre contrôleur:
$rootScope.$on('menuActivateActionPublish', function(event) {});
Puisque vous enregistrez votre écouteur $ on sur $ rootScope, il ne sera pas détruit par le contrôleur et la prochaine fois que vous l'initialiserez, il sera créé à nouveau.
Vous devez créer votre auditeur sur la portée du contrôleur
$scope.$on('menuActivateActionPublish', function(event) {});
Veillez à éviter deux instances du contrôleur, cela signifie deux écouteurs d'événement, ce qui signifie que la méthode est exécutée deux fois! (exemple: utiliser deux fois 'ng-controller')
Pour compléter la réponse que1326, par exemple, si vous utilisez ui-router et que vous avez quelque chose comme:
.state('app.yourpage', {
url:'yourPage',
views: {
'content@': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
et dans yourPage.html vous avez un ng-controller="YourController as Ctrl"
, vous créez alors 2 instances du contrôleur: 1 instance est créée par la configuration de l’état et une autre dans votre code HTML.
La seule solution que je pouvais mettre au travail consistait à créer le programme d'écoute à l'intérieur de l'événement $ viewContentLoaded:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});