我一直看到以下angularjs控制器语法结构。
angular.module('7minWorkout').controller('WorkoutController',
['$scope', '$interval', '$location',
function ($scope, $interval, $location)
{
}]);
为什么在参数名称中重复?为什么不喜欢这个
angular.module('7minWorkout').controller('WorkoutController',
['$scope', '$interval', '$location',
function ()
{
}]);
或
angular.module('7minWorkout').controller('WorkoutController',
[
function ($scope, $interval, $location)
{
}]);
答案 0 :(得分:6)
数组语法将帮助您对js
代码进行缩小/ uglify。
angular.module('7minWorkout').controller('WorkoutController',
function ($scope, $interval, $location) {
// code here
});
将缩小和损坏为:
angular.module('7minWorkout').controller('WorkoutController',
function (a, b, c) {
// code here
});
因此,Angular无法确定要注入的依赖项
另一方面,使用array
声明:
angular.module('7minWorkout').controller('WorkoutController',
['$scope', '$interval', '$location', function ($scope, $interval, $location) {
// code here
}]);
将缩小为:
angular.module('7minWorkout').controller('WorkoutController',
['$scope', '$interval', '$location', function (a, b, c) {
// code here
}]);
所以Angular会知道a
,b
和c
代表什么。
如果您使用下面的第一个示例代码,还有另一种注入变量的方法:
WorkoutController.$inject = ['$scope', '$interval', '$location'];
或
angular.module('7minWorkout').controller('WorkoutController', /* @ngInject */
function ($scope, $interval, $location) {
// code here
});
将在注释代码时创建上述$inject
方法。
因此,主要有四种Here is the JSFiddle demo:
像@ngInject这样的工具允许您在应用中使用隐式依赖注释,并在缩小之前自动添加内联数组注释。如果您决定采用此方法,则可能需要使用ng-strict-di
。
有关详细信息,请参阅ng-annotate。
答案 1 :(得分:2)
这"重复"是为了使其缩小安全:
答案 2 :(得分:2)
或者您可以根据流行的angular-styleguide https://github.com/johnpapa/angular-styleguide
使用以下语法angular.module('7minWorkout')
.controller('WorkoutController', WorkoutController);
WorkoutController.$inject = ['$scope', '$interval', '$location'];
function WorkoutController($scope, $interval, $location) {
}
答案 3 :(得分:2)
您可以编写第一个版本,因为它只省略了函数的参数,这些参数也可以通过函数内的O(2^n)
访问。所以你会避免重复,但切片参数属性也不是很有效(相比之下只需输入参数)。
正如其他人的答案所述,重申是为了使其缩小安全。
答案 4 :(得分:2)
第一个控制器语法可以使用ngmin等工具缩小/ uglify javascript代码。我不太确定你提供的第二和第三个选项是否可行创建一个控制器,但无论如何它们都不会被正确缩小,因为这些工具现在不会是提供者。我建议使用选项1或选项3(不带括号)来创建控制器。请注意,自动化工具不会正确缩小选项3。
有关创建控制器的一些有用信息: AngularJS Developer Guide - Controllers
选项3不带括号
angular.module('7minWorkout').controller('WorkoutController', function ($scope, $interval, $location)
{
//Your Code
});