Javascript eslint警告解释

Javascript eslint警告解释,javascript,angularjs,eslint,Javascript,Angularjs,Eslint,我一直在玩ES6和angular,我正在使用eslint插件angular来验证我的javascript。我有以下服务: export function runBlock ($rootScope, $state, $log) { 'ngInject'; $rootScope.$on( '$stateChangeStart', function(event, toState) { // ... } ); 但是eslint给了我以下错误: The "$on" call sho

我一直在玩ES6和angular,我正在使用
eslint插件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
我的意思是,我理解这个警告,但我在以前的角度项目中从来没有这样做过,我应该按照错误的建议去做吗?为什么需要/良好实践


eslint插件的文档参考了
的内容,但我在那里没有发现对这种情况的提及。

不仅johnpaa styleguide没有提到这种情况,它实际上还包括一个忽略
$rootScope.$on
返回的示例。但是,关于的讨论稍微澄清了意图:

如果控制器正在
$rootScope
上注册侦听器,则可能应在“
$destroy
”中手动销毁该侦听器,因为根作用域将比所有控制器都长--

该帖子还间接引用了《指令应自行清理》中的最佳实践


因此,底线是:一个常规的
$scope
对象最终将在其控制器销毁时被销毁,并将其事件侦听器随身携带(假设您没有执行任何类型的循环引用以将其保留在作用域中)<代码>$rootScope永不消亡,因此永远不会释放其事件处理程序。如果您的控制器正在将事件侦听器添加到
$rootScope
,它应该删除控制器的
$destroy
处理程序中的该处理程序。

感谢您的解释,这很有意义!