我在这里是一个angularJS noob,根据我的理解,我可以在两个地方注入依赖。
angular.module('myApp', [A: HERE IS ONE PLACE TO DO IT])
.controller('HomeController', function(B: $hereIsAnotherPlace){
});
我是对的吗?如果是这样,有什么区别?
答案 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 ) { ... }]);
在后一个示例中,您可以将$myService
中arguments
的名称更改为您喜欢的任何内容。
快速示例
.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,否则它将创建一个新模块,而不是使用已创建的模块。