我有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次。我已经提到了
但无法使用它们获得解决方案。请帮帮我...... !!
答案 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
});
}
但很快我发现我已多次初始化我的控制器,并采取了纠正措施来删除控制器的多个声明。