它从rootScope发送一次$ broadcast,但是监听器($ on)被调用两次。
侦听器位于控制器中,它使用$rootScope.$on
而不是$scope.$on
。有人有这个问题吗?
修改
rootScope:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
其他控制器:
$rootScope.$on('menuActivateActionPublish', function(event) {});
答案 0 :(得分:23)
由于您在$ rootScope上注册了$ on侦听器,因此它不会被控制器破坏,下次启动控制器时会再次创建它。
您应该在控制器范围
上创建监听器$scope.$on('menuActivateActionPublish', function(event) {});
答案 1 :(得分:7)
小心你避免两个控制器实例意味着两个事件监听器,这意味着该方法被执行两次!! (例如:使用两次' ng-controller')
答案 2 :(得分:4)
为了补充que1326的答案,例如,如果您使用的是ui-router并且有类似
的内容.state('app.yourpage', {
url:'yourPage',
views: {
'content@': {
templateUrl : 'views/yourPage.html',
controller : 'YourController'
}
}
})
并在yourPage.html中有ng-controller="YourController as Ctrl"
,然后您创建了2个控制器实例:1个实例由状态配置创建,另一个实例由html创建。
答案 3 :(得分:0)
我可以开始工作的唯一解决方案是在$ viewContentLoaded事件中创建监听器:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});