我正在阅读the Angular docs about injecting dependencies,并试图找出“同步”意味着什么。
如同,保持“同步”与保持“同一顺序”之间的区别是什么?文档似乎暗示它们之间存在一些差异。
关于内联数组表示法,
使用此类注释时,请注意使注释数组与函数声明中的参数保持同步。
关于 $inject
属性注释,
在这种情况下,$inject
数组中值的排序必须与MyController中参数的顺序相匹配。
就像数组注释一样,您需要注意保持$inject
与函数声明中的参数同步。
答案 0 :(得分:2)
'同步'和'按顺序'在这种情况下意味着相同的事情。
除了Implicit Annotation
之外的所有情况下,顺序都很重要(但是在缩小/丑化期间隐式定义的函数会中断)
从这里可以看出:
app = angular.module('myApp', []);
// Inline Array Notation where we are defining the dependencies in the opposite order of what the function is defined as
app.controller('myInlineCtrl', ['$http', '$scope', function ($scope, $http) {
$scope.testVal = '$scope passed as $scope';
$http.testVal = '$http passed as $scope';
// results in `$http passed as $scope`
}]);
// $inject Property Annotation
var myInjectorCtrl = function ($scope, $http) {
$scope.testVal = '$scope passed as $scope';
$http.testVal = '$http passed as $scope';
// results in `$http passed as $scope`
}
// Inject the dependencies in the opposite order
myInjectorCtrl.$inject = ['$http', '$scope'];
app.controller('MyInjectorCtrl', myInjectorCtrl);
上述测试表明,我们必须遵循注入的顺序而不是函数定义中参数的顺序。这与能够使用您希望的任何参数名称(在合理范围内)定义函数是一致的,这样当它到达应用程序的minification
时,函数本身可以被压缩,但仍然使用正确的参数调用
这方面的一个例子是:
// Define a controller with your own argument names
app.controller('myMickeyMouseCtrl', ['$http', '$scope', '$timeout', function (mickey, donald, daffy) {
mickey.testVal = 'mickey passed as $scope';
donald.testVal = 'donald passed as $scope';
daffy.testVal = 'daffy passed as $scope';
// results in `donald passed as $scope`
}]);
所有三个http://jsfiddle.net/6qh2oyu6/
的演示重要的是要注意,如果您在定义它之后定义myInjectorCtrl.$inject = ['$timeout'];
,您将清除为该Controller函数存储的注入,在这种情况下,只有角度$timeout
函数才会生成注入。