点击按钮时的广播事件: -
$scope.onButtonClick = function(){
$rootScope.$broadcast('onButtonClick');
}
在另一个控制器中捕捉事件: -
$rootScope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
但即使只开了一次,它也抓了两次。那是为什么?
答案 0 :(得分:39)
事实证明,由于html中的ng-controller
声明以及ui-router
的状态设置的一部分,实例化了多个控制器。
解决方案是删除其中一个声明。
答案 1 :(得分:10)
如果您在$rootScope
上广播活动,则可以在每个控制器$scope
上捕获该事件。
IMO你不应该在$rootScope
上发现事件。
$scope.$on('onButtonClick',function(event){
alert("catched");
console.log(event);
});
我已经创建了一个plunker展示,它显示它完全按预期工作。 Plunker
您可能有多个同一控制器实例,您可以在其中捕获事件。请检查这是Chandermani建议的。
答案 2 :(得分:4)
Angular $rootScope.$broadcast()
事件在控制器中被捕获两次
$scope.$on('saveCancelLeadInfo', function (event, args) {
if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
$scope.$$listenerCount["saveCancelLeadInfo"] = 0;
}
your code here
});