它发出$从rootScope播出一次,但监听器($上)被调用两次。
监听器是在控制器,它使用$rootScope.$on
代替$scope.$on
的。已经有人有这个问题?
编辑
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
其他控制器:
$rootScope.$on('menuActivateActionPublish', function(event) {});
既然你在$ rootScope注册监听$,它不会破坏与控制器和下一次初始化它被再创造的控制器。
您应该创建在控制器范围监听器
$scope.$on('menuActivateActionPublish', function(event) {});
小心你避免控制器的两个实例意味着两个事件侦听器,这意味着被执行两次的方法! (例如:使用两倍 'NG-控制器')
为了补充que1326答案,作为一个例子,如果你正在使用的用户界面 - 路由器,有这样的事
.state('app.yourpage', {
url:'yourPage',
views: {
'content@': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
在yourPage.html你有一个ng-controller="YourController as Ctrl"
,那么你所创建的控制器的两个实例:1分的实例是由国家配置创建和另外一个在你的HTML。
唯一的解决办法我能得到的工作是创建$ viewContentLoaded事件中的监听器:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});