控制器中的Angularjs $范围

时间:2015-01-22 04:53:20

标签: angularjs angularjs-scope

请注意,我是Angularjs的新手。

在编写控制器时,我发现我可以使用

controller('MyController', ['$scope', function($scope) {}])

controller('MyController', function($scope) {})

两者有什么区别?

3 个答案:

答案 0 :(得分:5)

两者都是一样的。

当缩小javascript代码时,函数中的所有局部变量都会更改为较小的变量以减小大小。例如。

function (largevariablename){
  largevariablename = 123;

}

将转换为

function (a){
  a= 123;
}

但是如果是$,则将$ scope缩小为s。然后依赖注入无法搜索s。因此,角度注入器将注入它在数组中找到的字符串值并将其注入而不是本地变量,您可以通过以下方式定义它

controller('MyController', ['$scope', function($scope) {}])

因此,如果您的代码不会被缩小,您可以使用简单版本

控制器(' MyController',功能($ scope){})

答案 1 :(得分:2)

这主要用于缩小。当你缩小js时

controller('MyController', function($scope) {})

将转换为

controller('MyController', function(a) {}) 

并且它将给出a未定义的错误。当您将依赖项提供为

controller('MyController', ['$scope', function($scope) {}])

它会将a映射到$ scope,它会正常工作。

答案 2 :(得分:1)

实际上,您不应该直接使用回调(匿名函数)来定义控制器。

您应该使用单独的函数和$ inject模块来手动识别您的依赖项。

controller('MyController', MyController);

MyController.$inject = ['$scope'];

function MyController($scope){

};

为什么要使用命名函数?

  

这会产生更易读的代码,更容易调试和减少   嵌套回调代码的数量。

为什么要使用$ inject?

  

这种技术反映了ng-annotate使用的技术,我   建议自动创建缩小安全   依赖。如果ng-annotate检测到注射已经完成,   它不会复制它。

     

此外,这可以保护您的依赖项免受攻击   当参数可能被破坏时,缩小问题。

这是从众所周知的John Papa Angularjs Style Guide

中提取的