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

angularjs – Angular:使用$rootScope.$on vs $scope.$on来捕获

发布时间:2020-12-17 17:22:31 所属栏目:安全 来源:网络整理
导读:嗨,我想知道在性能方面哪些更好. 假设我有这个广播东西的工厂: angular.module('core.foo') .factory('Foo',['$rootScope',function FooFactory($rootScope) { $rootScope.$broadcast('bar',baz); } ] ); 并在某个地方(或很多人)监听该事件.什么会更好? 要
嗨,我想知道在性能方面哪些更好.
假设我有这个广播东西的工厂:

angular.module('core.foo')
  .factory('Foo',['$rootScope',function FooFactory($rootScope) {

        $rootScope.$broadcast('bar',baz);

      }
    ]
  );

并在某个地方(或很多人)监听该事件.什么会更好?

要使用$rootScope.$on:

angular.module('foo').component('foo',{
  templateUrl: 'foo.html',controller: ['$rootScope',function FooController($rootScope) {

      $rootScope.$on('bar',function(event,data){
        // use the data
      });

    }]
});

或$scope.$on:

angular.module('foo').component('foo',controller: ['$scope',function FooController($scope) {

      $scope.$on('bar',data){
        // use the data
      });

    }]
});

两者都有效,我只是好奇.

解决方法

我真的不明白为什么这里的人似乎如此着迷于表现.遇到性能问题时,您应该只担心性能问题.否则,它是过早的优化,这是所有邪恶的根源.

在这种情况下,邪恶可能是内存泄漏,以及许多性能问题.

控制器的范围与控制器具有相同的生命周期.另一方面,$rootScope是一个单身人士.

因此,如果您向根作用域添加一个侦听器,并且在不再需要它时忘记删除它,则会发生内存泄漏.监听器具有对控制器的隐式引用,它具有对其作用域的隐式引用,将保持活动状态,消耗内存,并继续无理由地响应事件.

但是,如果向控制器的范围添加侦听器,则当范围和控制器被销毁时,则任何人都不会再有对侦听器的引用,并且所有内容都将被垃圾回收.

因此,首先要努力实现简单性,可维护性,可测试性和正确性.性能不应该是您主要关注的问题.该框架确保使用框架的每种自然的,有文档记录的方式足够快.

(编辑:李大同)

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

    推荐文章
      热点阅读