为什么主模块的服务可用于其他模块?

时间:2015-06-09 10:24:44

标签: angularjs dependency-injection

我有一个主模块main,其中包含服务mainService。然后我在我的主模块中注入了另一个模块moduleA。我在mainService中随机调用moduleA而没有注入main模块,并且惊讶地发现它工作正常。

angular.module('main', ['moduleA']);
angular.module('main').service('mainService', function(){
   //insert code here
});

angular.module('moduleA', []);
angular.module('moduleA').controller('abc', function(mainService){
   //mainService available here, without injecting main module
});

我想知道这背后的原因。我曾在评论中读到,模块中定义的服务在应用程序的任何位置都可用,但无法找到源。可以继续这样使用它吗?

如果有帮助,我正在使用AngularJS ver 1.3.15

3 个答案:

答案 0 :(得分:22)

是的,由于父子关系,您可以使用main服务。 "主"是一个父模块和" moduleA"它的子/依赖模块。

" main"中定义的任何服务,控制器,指令模块将与" moduleA"

一起提供

让我们用更复杂的场景来理解这个概念

angular.module('main', ['moduleA', 'moduleB']);


angular.module('moduleA', []);
angular.module('moduleA').service('moduleAService', function(){
   //insert code here
});

angular.module('moduleB', []);
angular.module('moduleB').controller('abc', function(moduleAService){
   //moduleAService available here, without injecting moduleA module
});

现在在这种情况下,moduleA和moduleB完全独立,但仍然可以访问moduleB服务

这是因为主模块依赖于moduleA和moduleB。所以moduleA服务注入主模块,而moduleB是" main"模块可以访问它。

答案 1 :(得分:4)

在父级中注入类似服务的内容,使其可供所有子级使用。

答案 2 :(得分:-2)

值得一读http://michalostruszka.pl/blog/2015/05/21/angular-dependencies-naming-clash/以了解更多关于模块的内容。

帖子摘要:

  

事实证明,只要名称匹配,AngularJS并不关心注入的内容

     

在AngularJS中,没有你依赖的模块。即使你要求的东西,你也不能确定你会得到你期望的那个,因为你声明对具有这个东西的模块的依赖。这是一个巨大的工具箱。