【问题标题】:Why a service of main module available in other modules?为什么主模块的服务在其他模块中可用?
【发布时间】:2015-06-09 10:24:44
【问题描述】:

我有一个主模块main,其中包含一个服务mainService。然后我在我的主模块中注入了另一个模块moduleA。我在 moduleA 中随机调用了 mainService 而没有注入 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

【问题讨论】:

    标签: angularjs dependency-injection


    【解决方案1】:

    是的,由于父子关系,您可以使用 main 的服务。 “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 服务

    这是因为主模块依赖于模块A和模块B。因此 moduleA 服务被注入到主模块中,而作为“主”模块的子模块的 moduleB 可以访问它。

    【讨论】:

    • 添加更多细节。
    • 一开始我也是这么认为的。但问题是,兄弟服务也随处可见。例如,moduleA 中定义的服务serviceA 也可以在没有 DI 的moduleB 中使用。我想知道父子/兄弟姐妹关系是否是这背后的唯一原因,还是还有其他原因?
    • 其实不是兄弟关系。让我们假设有 2 个孩子不喜欢分享某样东西。但是,通过父子关系,1 个孩子的财产被转移给父母,现在另一个孩子可以访问它请求父母。就像在我们的案例中一样 - 尽管没有依赖注入,但您仍然可以访问服务,因为父级拥有服务的控制权。
    • 好的,我想我现在明白了。谢谢
    • @sahilgupta - 欢迎 :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      帖子摘要:

      事实证明,AngularJS 并不真正关心从哪里注入东西,只要名称匹配即可

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

      【讨论】:

      • 始终欢迎提供指向潜在解决方案的链接,但请add context around the link,以便您的其他用户知道它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久离线。考虑到仅仅是指向外部站点的链接是Why and how are some answers deleted? 的一个可能原因。
      • 请在此处添加外部链接的主要部分作为答案。如果将来该链接断开,则此答案将毫无用处。谢谢
      • 按照评论中的建议从链接帖子中添加了一些摘要内容。
      猜你喜欢
      • 2013-08-30
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多