AngularJS依赖注入在哪里指定?

时间:2013-10-13 22:34:27

标签: javascript angularjs

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

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

});

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

3 个答案:

答案 0 :(得分:2)

在您的示例中,A是您可以指定模块而不是依赖注入(DI)的地方。下面介绍了代码的这种变体:

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

第二个(B)是必需的,第一个(A)是可选的(但具有下面描述的优点)。

以下是仅使用Angular文档中的第二个(B)的示例:

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

但Javascript minifiers和obfuscators可以重命名参数并打破这种方法,因为angular期望,例如,$ scope被精确命名为$ scope(而minifiers喜欢将参数重命名为尽可能小的东西,以便将文件缩小为尽可能小。)

除此之外,其中一种方式是内联注释:

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

(再次来自角度文档)。这可以解决问题,因为minifers / ..不会更改字符串文字。而angular知道将具有该字符串名称的服务注入到函数内的匹配参数中。因此,缩放器可以将参数名称更改为任何内容,并且唯一重要的是服务在字符串/参数列表中的位置(第一个字符串与第一个参数匹配等)。

有关依赖注入的更多信息:http://docs.angularjs.org/guide/di

答案 1 :(得分: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 ) { ... }]);

在后一个示例中,您可以将$myServicearguments的名称更改为您喜欢的任何内容。

快速示例

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

因此,最后两个示例是相同的,当您使用Array指定注入时,参数可以按照它们在Array中所需的顺序传递而命名。

答案 2 :(得分:0)

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

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

B用于注入控制器......

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

});

不再注射A,否则它将创建一个新模块,而不是使用已创建的模块。

相关问题