Javascript eslint警告解释
我一直在玩ES6和angular,我正在使用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
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
处理程序中的该处理程序。感谢您的解释,这很有意义!