我有一个主模块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
。
答案 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中,没有你依赖的模块。即使你要求的东西,你也不能确定你会得到你期望的那个,因为你声明对具有这个东西的模块的依赖。这是一个巨大的工具箱。