Angular $ rootScope.$ broadcast()事件在控制器中被捕获两次

Pra*_*bha 24 angularjs rootscope

点击按钮时广播事件: -

$scope.onButtonClick = function(){
    $rootScope.$broadcast('onButtonClick');
}
Run Code Online (Sandbox Code Playgroud)

并在另一个控制器中捕捉事件: -

$rootScope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});
Run Code Online (Sandbox Code Playgroud)

但即使只开了一次,它也抓了两次.这是为什么?

Cha*_*ani 41

事实证明,由于ng-controllerhtml中的声明以及作为状态设置的一部分,多个控制器被实例化ui-router.

解决方案是删除其中一个声明.


Joh*_*nes 10

如果您广播事件$rootScope,则可以在每个控制器上捕获事件$scope.IMO你不应该抓住这个事件$rootScope.

$scope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});
Run Code Online (Sandbox Code Playgroud)

我创建了一个plunker展示,它显示它完全按预期工作.Plunker

您可能有多个同一控制器实例,您可以在其中捕获事件.请检查这是Chandermani建议的.