Angularjs $broadcast 一次,$on 两次
Angularjs $broadcast once, $on twice
它从 rootScope 发送 $broadcast 一次,但监听器 ($on) 被调用两次。
侦听器位于控制器中,它使用 $rootScope.$on
而不是 $scope.$on
。有人遇到过这个问题吗?
编辑
根范围:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
其他控制器:
$rootScope.$on('menuActivateActionPublish', function(event) {});
由于您在 $rootScope 上注册了 $on 侦听器,它不会随控制器销毁,下次您初始化控制器时它会再次创建。
您应该在控制器范围内创建监听器
$scope.$on('menuActivateActionPublish', function(event) {});
小心避免控制器的两个实例意味着两个事件侦听器,这意味着该方法被执行两次!! (示例:使用两次 'ng-controller' )
为了补充 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 中创建。
我能开始工作的唯一解决方案是在 $viewContentLoaded 事件中创建侦听器:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});
它从 rootScope 发送 $broadcast 一次,但监听器 ($on) 被调用两次。
侦听器位于控制器中,它使用 $rootScope.$on
而不是 $scope.$on
。有人遇到过这个问题吗?
编辑
根范围:
$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);
其他控制器:
$rootScope.$on('menuActivateActionPublish', function(event) {});
由于您在 $rootScope 上注册了 $on 侦听器,它不会随控制器销毁,下次您初始化控制器时它会再次创建。
您应该在控制器范围内创建监听器
$scope.$on('menuActivateActionPublish', function(event) {});
小心避免控制器的两个实例意味着两个事件侦听器,这意味着该方法被执行两次!! (示例:使用两次 'ng-controller' )
为了补充 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 中创建。
我能开始工作的唯一解决方案是在 $viewContentLoaded 事件中创建侦听器:
$scope.$on('$viewContentLoaded', function() {
//Put your listener(s) in here
$scope.$on('menuActivateActionPublish', function(event) {});
});