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

如何在AngularJS中取消注册到rootscope的广播事件?

发布时间:2020-12-17 08:58:32 所属栏目:安全 来源:网络整理
导读:我有以下: angular.module('test') .controller('QuestionsStatusController1',['$rootScope','$scope','$resource','$state',function ($rootScope,$scope,$resource,$state) { $scope.action2 = function() { $rootScope.$broadcast('action2@QuestionSta
我有以下:
angular.module('test')
    .controller('QuestionsStatusController1',['$rootScope','$scope','$resource','$state',function ($rootScope,$scope,$resource,$state) {

        $scope.action2 = function() {
            $rootScope.$broadcast('action2@QuestionStatusController1');
        }

    }]);

angular.module('test')
   .controller('QuestionsStatusController2',$state) {

    $rootScope.$on('action2@QuestionStatusController1',function {
         //write your listener here
    })

   }]);

这是我的理解,我需要取消注册侦听事件。有人可以告诉我我怎么编码/这样做?

如果你不注销事件,你会得到一个内存泄漏,因为你传递给$ on的函数不会被清除(因为它的引用仍然存在)。更重要的是,在其范围内的函数引用的任何变量也将被泄露。这将导致您的函数多次调用,如果您的控制器在应用程序中多次创建/销毁。幸运的是,AngularJS提供了一些有用的方法来避免内存泄漏和不必要的行为:

> $ on方法返回一个可以调用来取消注册事件侦听器的函数。您将需要将您的注销函数保存为一个变量供以后使用:var cleanUpFunc = $ scope。$ on(‘yourevent’,…);请参阅$ on:http://docs.angularjs.org/api/ng.$rootScope.Scope#$on的文档
>每当一个范围在Angular中被清除(即一个控制器被销毁)一个$ destroy事件在该范围被触发。你可以注册到$ scope的$ destroy事件,并从那里调用你的cleanUpFunc。

您可以将这两个有用的内容绑定在一起,以正确清理您的订阅。我把这样的一个例子:http://plnkr.co/edit/HGK9W0VJGip6fhYQQBCg?p=preview.如果你注释掉行cleanUpFunc();然后点击切换和做东西按钮几次,你会注意到我们的事件处理程序被调用多次,这是不是真的需要。

现在,毕竟,为了使你的具体情况正确,只需将QuestionsStatusController2中的代码更改为以下内容:

angular.module('test')
   .controller('QuestionsStatusController2',$state) {

    var cleanUpFunc = $rootScope.$on('action2@QuestionStatusController1',function {
         //write your listener here
    });

    $scope.$on('$destroy',function() {
        cleanUpFunc();
    });

   }]);

通过调用$ destroy中的cleanUpFunc(),您的action2 @ QuestionStatusController1事件的事件监听器将被取消订阅,当您的控制器被清除时,您将不再泄漏内存。

(编辑:李大同)

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

    推荐文章
      热点阅读