这两者之间有什么区别:
angular.module('myapp' ,[])
.controller('MyController', function($scope){...});
和
angular.module('myapp' ,[])
.controller('MyController, ['$scope', function($scope){...})];
对于像我这样刚接触AngularJS的人来说,这非常复杂。语法与Java和C的区别太大。
非常感谢。
答案 0 :(得分:13)
它们之间没有任何区别。两个代码的工作方式相同。但是,如果你使用第一个代码,当你缩小代码时,它会混淆。
寻找一个例子:
.controller('MyController', function(a){...});//$scope is changed to a
并且您的代码将无法工作,因为angularjs代码使用$ scope变量,因为它不接受第一,第二,第三等参数。
所以,第二个代码比第一个代码更安全,就好像当你缩小代码时,它仍然需要相同的变量,即$ scope。
寻找一个例子:
.controller('MyController', ['$scope', function(a){...})];//a refers to $scope
因此,上面的代码在缩小代码时工作正常,因为$ scope被注入代替a。因此,如果您传递多个参数,那么在此示例中排序很重要。请看以下内容:
.controller('MyController', ['$scope','$timeout', function(s,t){...})];
s作为$ scope注入,t作为$ timeout注入。因此,如果您更改它们的顺序,如['$timeout','$scope', function(s,t){...})]
,那么s是$ timeout,t是$ scope。因此,在这个示例中排序很重要,但在第一个示例中,代码排序无关紧要,因为名称很重要,例如$ scope,$ timeout。
如果您使用下面的第一个示例代码,还有另一种注入变量的方法:
MyController.$inject = ['$scope'];
对于多个参数,
MyController.$inject = ['$scope','$timeout'];
因此,主要有三种annotation:
答案 1 :(得分:2)
第二个是缩小安全。
因为Angular从名称中推断出控制器的依赖关系 控制器的构造函数的参数,如果你是 缩小PhoneListCtrl控制器的JavaScript代码,全部 函数参数也将被缩小,并且依赖性 注入器无法正确识别服务。