Angularjs $播出一次,美元两次

问题描述 投票:18回答:4

它发出$从rootScope播出一次,但监听器($上)被调用两次。

监听器是在控制器,它使用$rootScope.$on代替$scope.$on的。已经有人有这个问题?

编辑

rootScope:

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

其他控制器:

$rootScope.$on('menuActivateActionPublish', function(event) {});
javascript angularjs angularjs-scope event-listener angular-broadcast
4个回答
26
投票

既然你在$ rootScope注册监听$,它不会破坏与控制器和下一次初始化它被再创造的控制器。

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

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

7
投票

小心你避免控制器的两个实例意味着两个事件侦听器,这意味着被执行两次的方法! (例如:使用两倍 'NG-控制器')


4
投票

为了补充que1326答案,作为一个例子,如果你正在使用的用户界面 - 路由器,有这样的事

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

在yourPage.html你有一个ng-controller="YourController as Ctrl",那么你所创建的控制器的两个实例:1分的实例是由国家配置创建和另外一个在你的HTML。


0
投票

唯一的解决办法我能得到的工作是创建$ viewContentLoaded事件中的监听器:

$scope.$on('$viewContentLoaded', function() {
  //Put your listener(s) in here
  $scope.$on('menuActivateActionPublish', function(event) {});
});
© www.soinside.com 2019 - 2024. All rights reserved.