25

Broadcating event on button click :-

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

And catching event in another controller :-

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

But it caught twice even though it fired only once. Why is that?

4

3 回答 3

42

事实证明,由于ng-controllerhtml 中的声明以及ui-router.

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

于 2014-09-12T09:54:14.743 回答
10

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

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

我创建了一个 plunker 展示,它表明它完全按预期工作。普朗克

您可能有同一个控制器的多个实例,您可以在其中捕获事件。请按照 Chandermani 的建议进行检查。

于 2014-09-11T13:14:07.463 回答
4

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

$scope.$on('saveCancelLeadInfo', function (event, args) {
    if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) {
        $scope.$$listenerCount["saveCancelLeadInfo"] = 0;
    }
    your code here
});
于 2016-05-30T11:46:44.513 回答