RootScopeから$ broadcastを1回送信しますが、リスナー($ on)は2回呼び出されます。
リスナーはコントローラー内にあり、$rootScope.$on
ではなく$scope.$on
を使用します。誰かがこの問題を抱えていましたか?
編集
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
他のコントローラー:
$rootScope.$on('menuActivateActionPublish', function(event) {});
$ onScopeに$ onリスナーを登録するので、コントローラーで破棄されず、次にコントローラーを初期化したときに再び作成されます。
コントローラースコープでリスナーを作成する必要があります
$scope.$on('menuActivateActionPublish', function(event) {});
コントローラーの2つのインスタンスが2つのイベントリスナーを意味することを回避するように注意してください。つまり、メソッドが2回実行されます。 (例: 'ng-controller'を2回使用)
たとえば、ui-routerを使用していて、
.state('app.yourpage', {
url:'yourPage',
views: {
'content@': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
yourPage.htmlにはng-controller="YourController as Ctrl"
の場合、コントローラの2つのインスタンスを作成しています。1つのインスタンスは状態設定によって作成され、もう1つのインスタンスはHTMLに作成されます。
私が作業できる唯一の解決策は、$ viewContentLoadedイベント内にリスナーを作成することでした。
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});