加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 多次调用函数防止$rootScope.$on

发布时间:2020-12-17 07:08:56 所属栏目:安全 来源:网络整理
导读:我在控制器顶部的代码上有一个$rootScope.$.我注意到每次加载/调用此控制器时,$rootScope.$on listener都会增加意味着它会在您访问控制器时无限期地添加和添加并添加一个监听器. 当我通过$rootScope调用它时我注意到了.$$从另一个控制器发出,$rootScope.$on
我在控制器顶部的代码上有一个$rootScope.$.我注意到每次加载/调用此控制器时,$rootScope.$on listener都会增加意味着它会在您访问控制器时无限期地添加和添加并添加一个监听器.

当我通过$rootScope调用它时我注意到了.$$从另一个控制器发出,$rootScope.$on中的函数被执行了几次,即使它只是一次发射/广播.

$rootScope.$on('listen',function() {
    $scope.displayString();
});

$scope.displayString = function() {
    console.log('test'); // This display 7 times because I visit the controller 7 times
}

是否可以阻止它创建另一个侦听器实例,以便在已有侦听器时,它不会创建新的侦听器.

解决方法

当控制器的作用域被销毁时,您需要取消注册事件监听器.

$on函数返回一个注销函数,该函数将在调用函数时删除侦听器.

所以你可以这样设置:

var deregister = $rootScope.$on('listen',function() {
    $scope.displayString();
});
$scope.$on('$destroy',deregister);

注意:这仅在控制器的范围实际被销毁时??才有效(例如,在从DOM中删除的指令中或导航到不同的路径时).如果没有发生这种情况,那么您将需要设计一种仅注册事件监听器的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读