2015-09-04 37 views
9

我是角度新人,想知道为什么以及何时应该注入所有我们需要的依赖项两次。为什么我们在angularjs中两次注入我们的依赖关系?

例子:

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',function($scope,$http,$cookies,$state,globalService){ 

}); 

但是,我们也可以写上面的代码为:

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function($scope,$http,$cookies,$state,globalService){ 

}]); 

为什么?

+0

其依赖关系注释请参阅https://docs.angularjs.org/guide/di –

+2

[Angularjs minify best practices]的可能重复(http://stackoverflow.com/questions/18782324/angularjs-minify-best -实践) – SomeKittens

回答

13

这是为了使应用程序minsafe

小心:如果您打算缩小您的代码,您的依赖项名称将被重命名并中断您的应用程序。

当你(或可能),再压缩所有文件,依赖被改为像ab,...等

但是,当你使用数组和字符串就像第二个片段所示,string从不缩小,可以用于映射。所以,该应用程序知道a$scope(请参阅下面的示例)。

例子:

// The minified version 
var _ = angular.module('analysisApp', []); 

_.controller('analysisController', ['$scope', '$http', '$cookies', '$state', 'globalService', function (a, b, c, d, e) { 
    a.name = 'John Doe'; // Now a here is `$scope`. 
}]); 

Angular Docs

这里是让你的应用程序minsafe与咕噜不错article

对于微小最佳实践:Angularjs minify best practice

2
var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function($scope,$http,$cookies,$state,globalService){ 

}]); 

在这种情况下,当u运行如下代码上面的代码可以成为像

var analysisApp=angular.module('analysisApp',[]); 

analysisApp.controller('analysisController',['$scope','$http','$cookies','$state','globalService',function(a,b,c,d, e){ 

}]); 

在这种情况下a, b, c, d将相应holde的'$scope','$http','$cookies','$state','globalService'的refrence和事情将按预期工作。

'$scope','$http','$cookies','$state','globalService'不会因为这些改变都是字符串作为字符串不是微小改变

analysisApp.controller('analysisController',function($scope,$http,$cookies,$state,globalService){ 

}); 

但是在缩小之后这种情况下,它可能会成为像

analysisApp.controller('analysisController',function(a, b, c, d, e){ 

}); 

现在像$scope and other所有角度的物体已经失去了意义而事情不会奏效。

3

通过对函数进行字符串化并检测其参数,Angular中的依赖注入工作。这是非常脆弱的,尤其是在缩小代码时,因为这些变量名称会被破坏,所以你的应用程序将会中断。解决方法是使用字符串告诉Angular这些注入的名称,该字符串不会被破坏。换句话说,如果你的代码被精缩它应该是这样的:

analysisApp.controller('analysisController', 
['$scope','$http','$cookies','$state','globalService', function(a,b,c,d,e) { 

}]); 

在幕后,角将匹配$scopea$httpb,等等。

另一种可能性是使用ngannotate,这是一种预处理器工具,可用于添加到构建过程中。它将采用第一个代码,并将其转化为第二个代码。

相关问题