【问题标题】:eslint warning interpretationeslint 警告解释
【发布时间】:2016-01-09 22:46:24
【问题描述】:

我一直在玩 ES6 和 Angular,我正在使用 eslint-plugin-angular 来验证我的 javascript。我有以下服务:

export function runBlock ($rootScope, $state, $log) {
  'ngInject';

  $rootScope.$on( '$stateChangeStart', function(event, toState) {
    // ...
  } );

但是eslint 给了我以下错误:

The "$on" call should be assigned to a variable, in order to be
destroyed during the $destroy event

我的意思是我理解这个警告,但我在以前的 Angular 项目中从来没有这样做过,我应该按照错误提示做吗?为什么需要它/良好做法?

eslint-plugin-angular 的文档参考了John Papa's angular styleguide,但我并没有真正找到关于这种情况的提及。

【问题讨论】:

    标签: javascript angularjs eslint


    【解决方案1】:

    johnpapa 样式指南不仅没有提到这种情况,它实际上包括了一个忽略$rootScope.$on 返回的示例。不过,one of the eslint-plugin-angular issues 上的讨论稍微阐明了意图:

    如果控制器在$rootScope 上注册了一个监听器,它可能应该在“$destroy”中手动销毁,因为根作用域将比所有控制器寿命长。 --davidmason

    该帖子还间接引用了the AngularJS documentation 中的“指令应自行清理”最佳实践。

    所以底线:一个常规的$scope 对象最终将在其控制器销毁时被销毁,并带上它的事件侦听器(假设您没有进行任何类型的循环引用以使其保持在范围内)。 $rootScope 永远不会消亡,因此永远不会释放其事件处理程序。如果您的控制器正在向$rootScope 添加一个事件侦听器,它应该在您的控制器的$destroy 处理程序中删除该处理程序。

    【讨论】:

    • 感谢您的解释,这很有道理!
    猜你喜欢
    • 2018-10-06
    • 2018-06-06
    • 1970-01-01
    • 2021-01-15
    • 2020-07-21
    • 2022-01-25
    • 2019-12-08
    • 1970-01-01
    • 2019-12-25
    相关资源
    最近更新 更多