我对这里的angularjs人提出了一个问题。
所以,我现在使用角度很长一段时间了。但是,每当我编写一个新的Controller或使用依赖注入的东西时,我发现自己错误地使用了内联定义。
someModule.controller('MyController', ['dep1', 'dep2', function (dep1, dep2) {
...
}]);
我理解它是如何工作的,但为什么有角度的人不会决定采用更常见的方法呢?例如,requirejs方式
someModule.controller('MyController', ['dep1', 'dep2'], function(dep1, dep2) {
...
});
困扰我的是,第二个参数是一个依赖项数组和将回调作为最后一个元素同时进行。实际上,整个模块代码都是在最后一个数组元素中编写的。
将依赖项放在额外的数组中会不会更好?这样我们就可以轻松地将一组依赖项动态地传递给定义。
我觉得这很尴尬,但从未真正考虑过背后的原因。谁可以给我解释一下这个?
答案 0 :(得分:10)
我不知道这种语法背后的实际原因,但我认为它与一致性有关 - 无论您在何处注入服务,都应该能够使用相同的语法。
大多数地方都使用示例中的语法:module.controller
,module.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)