$ scope。$被解雇3次

时间:2016-10-05 08:43:09

标签: angularjs controllers

我有2个不同的角度控制器,其中一个像这样广播

$timeout(function() {
    if($scope.modal){
      $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,id);
      $scope.modal.hide();
      $scope.modal.remove();
    }
}, 3000);

在另一个控制器中,我正在播放广播。

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){
    // some action
});

问题是 $ scope。$ on 函数被调用3次。我已经提到了

但无法使用它们获得解决方案。请帮帮我...... !!

2 个答案:

答案 0 :(得分:1)

快速而肮脏的黑客:使用布尔标志

var once = true;
$timeout(function() {
   if($scope.modal){          
      $rootScope.$broadcast(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST, {id: id, once: once});
      $scope.modal.hide();
      $scope.modal.remove();
      once = false;
   }
}, 3000);

并在你的听众中:

$scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,args){
   if(args.once)
      // some action, only the first time
});

请记住,这只是(脏的,但仍然)解决方案,只有当你无法找到为什么你的广播每个事件被调用3次时。

答案 1 :(得分:0)

为了解决问题,我做了类似下面的事情,

if(!$rootScope.$$listenerCount[DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST]){
    $scope.$on(DATAINPUT_EVENT.REFRESH_COMPLETED_DATA_LIST,function(event,id){
         // some action
    });
}

但很快我发现我已多次初始化我的控制器,并采取了纠正措施来删除控制器的多个声明。