dvc*_*crn 10 javascript arrays dependency-injection angularjs
我对这里的angularjs人提出了一个问题.
所以,我现在使用角度很长一段时间了.但是,每当我编写一个新的Controller或使用依赖注入的东西时,我发现自己错误地使用了内联定义.
someModule.controller('MyController', ['dep1', 'dep2', function (dep1, dep2) {
...
}]);
Run Code Online (Sandbox Code Playgroud)
我理解它是如何工作的,但为什么那些棱角分明的家伙没有决定采用更常见的方法呢?例如requirejs方式
someModule.controller('MyController', ['dep1', 'dep2'], function(dep1, dep2) {
...
});
Run Code Online (Sandbox Code Playgroud)
困扰我的是,第二个参数是一个依赖关系数组,并且回调是同时的最后一个元素.实际上,整个模块代码都是在最后一个数组元素中编写的.
将依赖项放在额外的数组中会不会更好?这样我们就可以轻松地将一组依赖项动态地传递给定义.
我觉得这很尴尬,但从未真正考虑过背后的原因.谁可以给我解释一下这个?
Mar*_*tin 10
我不知道这种语法背后的实际原因,但我认为它与一致性有关 - 你应该能够使用相同的语法,无论你需要注入服务的位置.
大多数地方使用的语法在你的例子:module.controller,module.factory等等.在这些地方的语法可以像蜂requirejs.
但是,在定义指令时,您还可以将服务注入其控制器.如果指令的控制器将被其他指令(例如ngModel指令)使用,则通常会执行此操作.
module.directive('myDirective', function () {
return {
controller: ['$scope', '$element', function ($scope, $element) {
// ...
}]
};
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您不能使用requirejs样式,但数组样式有效.我想这可能是语法原因之一.可能还有其他人.
作为旁注,您可以将指令的控制器定义为普通控制器,但这会使代码更加冗长,而且您可能会在指令之外的其他位置使用控制器.
module.controller('myDirectiveCtrl', ['$scope', '$element', function ($scope, $element) {
// ...
}]);
Run Code Online (Sandbox Code Playgroud)
然后定义指令.
module.directive('myDirective', function () {
return {
controller: 'myDirectiveCtrl'
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2899 次 |
| 最近记录: |