AngularJS将依赖项名称存储为字符串,这是有意义的,因为我们可以这样做:
var dependencies = {};
function addDependency(name, value){
if (typeof name == 'string') {
dependencies['name'] = value;
} else {
//throw err
}
}
但我不明白如何通过AngularJS的方式通过非字符串参数来获取该值,它告诉您为了访问依赖项,只需将参数视为名称:
获取依赖关系的最简单方法是假设 函数参数名称是依赖项的名称。
someModule.controller('MyController', function($scope, greeter) { // ... });
在abover的情况下,我认为greeter
必须采用字符串的形式,因此可以像dependencies[argument[i]];
这样的循环访问它
我只是不明白如果参数不是字符串,JavaScript中如何将该参数的名称映射到某个依赖项名称。这怎么可能?我真的想知道如何在我的代码中进行各种语法改进。
答案 0 :(得分:2)
有可能:
var foo = function(foo, bar) {};
foo.toString();
"function (foo, bar) {}"
现在通过一些正则表达式解析,您可以获取参数的名称。这就是Angular所做的。这有点像黑客,并且气馁。您可以在应用程序中使用ng-strict-di
在未声明显式DI的情况下抛出错误。
Angular定义了许多显式声明依赖关系的方法。
我建议使用静态$inject
属性。
MyController.$inject = ['$scope', 'greeter'];
function MyController($scope, greeter) { // . . . }