定义AngularJS Controller时使用数组表示法的原因

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,它会将第二个示例更改为第一个示例,以便代码再次缩小安全性.

  • @Seram 是正确的,纯粹是为了在缩小代码时保护您的代码 (2认同)
  • @Seram我真的推荐那些thinkster教程,如果你想学习角度,对我来说它们太棒了.我很确定这是我第一次了解到你有这个问题的其中一个 (2认同)

Shi*_*mar 6

这两种方法没有太大区别.两个代码的工作方式相同.但是如果你使用第二个代码,那么在你缩小代码之后它会让你感到困惑.

寻找一个例子: -

  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)

因此,主要有三种注释:

  1. 隐式注释 - 您的第一个示例代码
  2. $ inject属性注释 - $ inject方法
  3. 内联数组注释 - 您的第二个示例代码

你可以在这里了解更多相关信息