AngularJS控制器:什么是正确的语法?

时间:2015-02-25 20:00:40

标签: angularjs controller

我通常以这种方式声明一个控制器:

.controller('myController', function($scope,/*other dependecies go here*/){
    // controller definition
};

但是在某些例子中(包括AngularJS官方文档中的一个),我发现了类似的内容:

angular.module('controllerExample', [])
  .controller('SettingsController2', ['$scope', SettingsController2]);

function SettingsController2($scope) {
     // controller definition
};

或简单(相当于我猜):

angular.module('controllerExample', [])
  .controller('SettingsController2', ['$scope', function(){
     // controller definition
   }
]);

现在,我不明白代码段1)代码段2)之间的实际差异和3)

此外,我不明白为什么有时相同的依赖关系在函数定义和函数参数之外(如代码片段3))但之外是没有$ 内部 (抱歉,我现在找不到示例。但我确定我遇到过这种情况。)

提前谢谢

2 个答案:

答案 0 :(得分:4)

数组语法是在代码通过minifier时防止角度破坏。如果你没有缩小你的javascript,除了你输入更多/更少之外,确实没有太大的区别。 Angular将这些函数作为字符串读取并处理它们。一些缩小器将其拧紧,因此奇怪的语法是当前的解决方案。

答案 1 :(得分:2)

@ jwimmer的答案是正确的,但我想提供一个更多的可能性。您可以使用$inject清除语法并保持代码缩小安全。

someCtrl.$inject = ['$scope', 'someDependency'];
function someCtrl($scope, someDependency) {
    ...
}

angular.module('someApp')
    .controller('someCtrl', someCtrl);