Angularjs$广播一次,$上两次



它从rootScope发送$broadcast一次,但侦听器($on)被调用两次。

侦听器位于控制器中,它使用$rootScope.$on而不是$scope.$on。有人有这个问题吗?

编辑

rootScope:

$rootScope.$broadcast('menuActivateAction' + item.event_name_postfix, item.event_args);

其他控制器:

$rootScope.$on('menuActivateActionPublish', function(event) {});

由于您在$rootScope上注册了$on侦听器,它不会被控制器破坏,下次初始化控制器时,它会再次创建。

您应该在控制器范围上创建侦听器

$scope.$on('menuActivateActionPublish', function(event) {});

小心避免控制器的两个实例意味着两个事件侦听器,这意味着该方法执行两次!!(例如:使用两次"ng控制器")

为了补充que1326的答案,例如,如果您使用的是ui路由器,并且有类似的东西

.state('app.yourpage', {
            url:'yourPage',
            views: {
                'content@': {
                    templateUrl : 'views/yourPage.html',
                    controller  : 'YourController'
                }
            }
        })

在您的Page.html中,您有一个ng-controller="YourController as Ctrl",然后您将创建控制器的两个实例:一个实例由状态配置创建,另一个实例在您的html中。

我能找到的唯一解决方案是在$viewContentLoaded事件中创建侦听器:

$scope.$on('$viewContentLoaded', function() {
  //Put your listener(s) in here
  $scope.$on('menuActivateActionPublish', function(event) {});
});

相关内容

  • 没有找到相关文章

最新更新