通过网上的各种教程,我遇到了两种不同的注册控制器的方法。
var app = angular.module('myApp', []);
//without explicit dependency injection
app.controller ("myCtrl1", function ($scope, $http) {
//some implementation
});
//with explicit dependency injection
app.controller ("myCtrl2", ["$scope", "$http", function ($scope, $http) {
//some implementation
}]);
两者似乎都兼容$ scope和$ http对象可以在函数内部使用。
有人可以告诉我这两种方法之间的区别是否优先于另一方法?如果angular可以找出要注入的正确依赖项,那么明确声明它有什么好处?
答案 0 :(得分:3)
问题在于缩小:
//without explicit dependency injection
a.controller ("myCtrl1", function (b, c) {
// Broken because toString here returns
// a, b - which are not dependencies that
// Angular knows how to resolve
});
//with explicit dependency injection
a.controller ("myCtrl2", ["$scope", "$http", function (b, c) {
// b and c are properly resolved
}]);
答案 1 :(得分:1)
主要区别在于,通过显式依赖注入,您的依赖关系不是基于参数名称而是基于您传递的字符串。这允许您在没有风险的情况下使用javascript minifiers,因为它们会重命名参数。