Yel*_*len 27 javascript angularjs
如果这个问题听起来太明显,请道歉.
我最近开始探索和学习AngularJS.我经历了一些很好的教程 -
..还有一些我见过的.
我不是说我读过/研究过所有文件.
问题从这里开始 -
现在,提出这个问题,我发现控制器的定义在一个地方是不同的,而在另一些地方它是不同的 -
一个定义使用一种数组符号(不确定正式术语)进行注射:
app.controller("MyCtrl", ['$scope', function($scope){
$scope.someData = "Array notation";
}]);
Run Code Online (Sandbox Code Playgroud)
就是这样,没有阵列:
app.controller("MyCtrl", function($scope){
$scope.someData = "non-array notation";
});
Run Code Online (Sandbox Code Playgroud)
不是说这是我唯一想要理解的东西,但是,我一定很想了解它们之间的区别.
这两者之间有很大的不同吗?
非常感谢.
注意:我确实在SO中搜索了类似的问题,但找不到我要找的东西.抱歉.
Jac*_*ers 24
不同之处在于,当第二个被缩小时,参数名称将被缩小,并且angular将不再能够检查参数以确定要注入的依赖项.具有字符串中的依赖性的数组语法意味着它是最小安全的.
有一个被调用的库ng-annotate,它会将第二个示例更改为第一个示例,以便代码再次缩小安全性.
这两种方法没有太大区别.两个代码的工作方式相同.但是如果你使用第二个代码,那么在你缩小代码之后它会让你感到困惑.
寻找一个例子: -
app.controller("MyCtrl", function(a){ ... });//$scope is changed to a
Run Code Online (Sandbox Code Playgroud)
并且您的代码将无法工作,因为AngularJs代码使用$ scope变量,因为它不接受第一,第二,第三等参数.
因此,第一个代码比第二个代码更安全,就好像当你缩小代码时,它仍将采用相同的变量,即$ scope.
寻找一个例子:
app.controller("MyCtrl", ['$scope', function(a){...}]);//a refers to $scope
Run Code Online (Sandbox Code Playgroud)
因此,上面的代码在缩小代码时工作正常,因为$ scope被注入而不是a.So,如果你传递多个参数然后在这个例子中排序事项.
请看以下内容:
app.controller("MyCtrl", ['$scope','$timeout' ,function(a,t){...}]);
Run Code Online (Sandbox Code Playgroud)
其中a作为$ scope注入,t作为$ timeout注入.
因此,如果您更改传递的参数的顺序为
app.controller("MyCtrl",['$ timeout','$ scope',function(a,t){...}]); 其中a是$ timeout,t是$ scope.
因此,在这个示例中排序很重要但在第二个示例中,代码排序无关紧要,因为名称很重要,例如$ scope,$ timeout.
如果您使用下面的第一个示例代码,还有另一种注入变量的方法:
MyCtrl.$inject = ['$scope'];
Run Code Online (Sandbox Code Playgroud)
对于多个参数,
MyCtrl.$inject = ['$scope','$timeout'];
Run Code Online (Sandbox Code Playgroud)
因此,主要有三种注释:
你可以在这里了解更多相关信息
| 归档时间: |
|
| 查看次数: |
5345 次 |
| 最近记录: |