缺少显式依赖注入¶
ID: js/angular/missing-explicit-injection
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- correctness
- maintainability
- frameworks/angularjs
Query suites:
- javascript-security-and-quality.qls
当 AngularJS 将依赖项注入到没有显式依赖项规范的函数时,它会通过名称将依赖项与函数参数匹配起来。 这样做很危险,因为某些源代码转换(如代码缩减)可能会更改参数的名称。 此类重命名将破坏 AngularJS 应用程序。
建议¶
当代码稍后会被缩减时,不要使用隐式注释来注释依赖注入函数。
示例¶
以下示例展示了一个带有隐式依赖项注释的 AngularJS 控制器。
angular.module('myModule', [])
.controller('MyController', function($scope) { // BAD: implicit dependency name
// ...
});
这是有问题的,因为该控制器的缩减版本可能如下所示
angular.module('myModule', [])
.controller('MyController', function(a) { // BAD: dependency 'a' does not exist
// ...
});
这意味着该函数将使用名为“a”的依赖项进行依赖注入,而该依赖项并不存在,这会导致运行时崩溃。
相反,为了支持代码缩减,请使用显式注释指定依赖项
angular.module('myModule', [])
.controller('MyController', ['$scope', function($scope) { // GOOD: explicit dependency name
// ...
}]);
参考¶
AngularJS 开发者指南:依赖注入 - 隐式注释.