ボタンクリック時のイベントのブロードキャスト:-
$scope.onButtonClick = function(){
$rootScope.$broadcast('onButtonClick');
}
そして、別のコントローラでイベントをキャッチする:-
$rootScope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
しかし、一度だけ発砲したにもかかわらず、それは二度キャッチしました。何故ですか?
結局のところ、htmlでのng-controller
宣言と、ui-router
の状態設定の一部として、複数のコントローラーがインスタンス化されました。
解決策は、宣言の1つを削除することです。
$rootScope
でイベントをブロードキャストすると、各コントローラー$scope
でイベントをキャッチできます。 IMO $rootScope
でイベントをキャッチしないでください。
$scope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
期待どおりに機能することを示す、プランカーショーケースを作成しました。 プランカー
イベントをキャッチする同じコントローラの複数のインスタンスがある可能性があります。 Chandermaniが示唆したようにこれをチェックしてください。
Angular $rootScope.$broadcast()
イベントがコントローラーで2回キャッチされました
$scope.$on('saveCancelLeadInfo', function (event, args) {
if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
$scope.$$listenerCount["saveCancelLeadInfo"] = 0;
}
your code here
});