gpt4 book ai didi

javascript - 为什么angular的DI内联注解中的函数是数组元素?

转载 作者:可可西里 更新时间:2023-11-01 02:40:25 24 4
gpt4 key购买 nike

我有一个问题要问这里的 angularjs 人员。

所以,我使用 Angular 已经有一段时间了。然而,每次当我写一个新的 Controller 或使用依赖注入(inject)的东西时,我发现自己写错了内联定义。

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

我明白它是如何工作的,但为什么有棱 Angular 的人不决定采用更通用的方法?比如requirejs方式

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

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

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

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

最佳答案

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

大多数地方都使用您示例中的语法:module.controllermodule.factory 等。在这些地方,语法可能类似于 requirejs。

但是,在定义指令时,您还可以将服务注入(inject)到它的 Controller 中。如果指令的 Controller 将被其他指令使用,通常会这样做,例如ngModel 指令。

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

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

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

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

然后定义指令。

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

关于javascript - 为什么angular的DI内联注解中的函数是数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21656548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com