2013-10-13 258 views
1

我是一个angularJS noob在这里,根据我的理解,有两个地方我可以注入依赖。AngularJS依赖注入在哪里指定?

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT]) 
.controller('HomeController', function(B: $hereIsAnotherPlace){ 

}); 

我说得对吗?如果是这样,有什么区别?

+2

'一个地方去做IT'实际上是一个地方添加模块 – SET

回答

1

在这里指定“这是一个地方做”实际上是在那里你可以注入不同的模块到另一个模块,下面是一个例子。

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

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

pageModule现在可以访问所有服务&指令..等连接到helperModule

你在哪里指定此

function(B: $hereIsAnotherPlace){ ... 

是您注射服务,虽然JavaScript是无效。

以下是可以注入服务的两种方法。

.controller('myController', function($myService) { ... }); 

或者您可以使用缩小的代码。

.controller('myController', ['$myService', function($myService) { ... }]); 

在后者的例子,你可以在arguments改变$myService名称你喜欢什么。

简单的例子

.controller('myController', ['$myService', function($thisIsEqualTo$myService) { ... }]); 

所以最后2例的是相同的,当你使用Array指定打针,这个论点可以任意命名,你需要他们的,因为他们的顺序传递阵列。

+0

你能详细说明你的意思吗?你可以在参数中改变$ myService的名字给你喜欢的任何东西 – denniss

+0

是的,现在更新。 – iConnor

0

A仅在创建模块时使用,并且只能在您的应用中使用一次。

angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT]); 

B是注入控制器...

angular.module('myApp') 
.controller('HomeController', function(B: $hereIsAnotherPlace){ 

}); 

A的无注入再次否则会创建一个新的模块,而不是使用您已经创建了一个。

2

在你的例子中,A是你可以指定模块而不是依赖注入(DI)的地方。下面,地址代码的这种变化:

.controller('HomeController', [A , function(B) {}]); 

第二个(B)是必需的,所述第一(A)是任选的(但具有下述好处)。

这里仅需使用从角文档第二(B)的例子:

function MyController($scope, greeter) {...}' 

但使用Javascript minifiers和混淆器可以重命名参数,并打破这个方法,因为角度预计,例如,$范围正好命名为$ scope(并且限制器喜欢将参数重命名为尽可能小的部分以缩小文件尽可能小)。

的一种方式,除其他外,周围是内联注释:

someModule.factory('greeter', ['$window', function(renamed$window) {...}]); 

(再次从角文档)。这解决了问题,因为minifers/..不会更改字符串文字。并且角知道将该字符串名称的服务注入到函数内的匹配参数中。所以参数名称可以被minifier改成任何东西,并且一切都很好,唯一重要的是服务在字符串/参数列表中的位置(第一个字符串与第一个参数匹配等)。

对于其它更多的依赖注入:http://docs.angularjs.org/guide/di