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

时间:2014-09-11 12:55:27

标签: angularjs rootscope

点击按钮时的广播事件: -

$scope.onButtonClick = function(){
    $rootScope.$broadcast('onButtonClick');
}

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

$rootScope.$on('onButtonClick',function(event){
  alert("catched");
  console.log(event);
});

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

3 个答案:

答案 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
});