DeX*_*eX3 7 javascript angularjs eslint
我一直在玩ES6和角度,我eslint-plugin-angular用来验证我的javascript.我有以下服务:
export function runBlock ($rootScope, $state, $log) {
'ngInject';
$rootScope.$on( '$stateChangeStart', function(event, toState) {
// ...
} );
Run Code Online (Sandbox Code Playgroud)
但是eslint给我以下错误:
The "$on" call should be assigned to a variable, in order to be
destroyed during the $destroy event
Run Code Online (Sandbox Code Playgroud)
我的意思是我理解这个警告,但是我在以前的角度项目中从未这样做过,如果我做了错误建议的话?为什么需要/良好实践?
这篇文章可供eslint-plugin-angular参考John Papa的角度风格指南,但我并没有真正提到这种情况.
johnpapa风格指南不仅没有提到这种情况,它实际上还包括一个忽略回归的例子$rootScope.$on.然而,关于其中一个eslint-plugin-angular问题的讨论澄清了一点意图:
如果控制器正在注册一个监听器,
$rootScope则可能应该在"$destroy"中手动销毁,因为根作用域将比所有控制器寿命更长.- davidmason
该帖子还间接引用了AngularJS文档中的"指令应该自行清理"的最佳实践.
所以底线:一个常规$scope对象最终将在其控制器执行时被销毁,并将其事件监听器与它一起使用(假设您没有进行任何类型的循环引用,使其保持在范围内).$rootScope永远不会死,因此永远不会释放它的事件处理程序.如果您的控制器正在添加一个事件监听器$rootScope,它应该删除控制器$destroy处理程序中的该处理程序.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |