为什么angular的DI内联注释中的函数是一个数组元素?

时间:2014-02-09 07:35:24

标签: javascript arrays angularjs dependency-injection

我对这里的angularjs人提出了一个问题。

所以,我现在使用角度很长一段时间了。但是,每当我编写一个新的Controller或使用依赖注入的东西时,我发现自己错误地使用了内联定义。

someModule.controller('MyController', ['dep1', 'dep2', function (dep1, dep2) {
  ...
}]);

我理解它是如何工作的,但为什么有角度的人不会决定采用更常见的方法呢?例如,requirejs方式

someModule.controller('MyController', ['dep1', 'dep2'], function(dep1, dep2) {
  ...
});

困扰我的是,第二个参数是一个依赖项数组将回调作为最后一个元素同时进行。实际上,整个模块代码都是在最后一个数组元素中编写的。

将依赖项放在额外的数组中会不会更好?这样我们就可以轻松地将一组依赖项动态地传递给定义。

我觉得这很尴尬,但从未真正考虑过背后的原因。谁可以给我解释一下这个?

2 个答案:

答案 0 :(得分:10)

我不知道这种语法背后的实际原因,但我认为它与一致性有关 - 无论您在何处注入服务,都应该能够使用相同的语法。

大多数地方都使用示例中的语法:module.controllermodule.factory等。在这些地方,语法可能就像requirejs一样。

但是,在定义指令时,您还可以将服务注入其控制器。如果指令的控制器将被其他指令使用,例如,通常会这样做。 ngModel指令。

module.directive('myDirective', function () {
    return {
        controller: ['$scope', '$element', function ($scope, $element) {
            // ...
        }]
    };
});

在这种情况下,您不能使用requirejs样式,但数组样式有效。我想这可能是语法原因之一。可能还有其他人。

作为旁注,您可以将指令的控制器定义为普通控制器,但这会使代码更加冗长,而且您可能会在指令以外的其他位置使用控制器。

module.controller('myDirectiveCtrl', ['$scope', '$element', function ($scope, $element) {
    // ...
}]);

然后定义指令。

module.directive('myDirective', function () {
    return {
        controller: 'myDirectiveCtrl'
    };
});

答案 1 :(得分:0)

您不必再使用数组语法了。您可以像这样编写代码:

IEnumerable<object>

Read more here