【问题标题】:Angularjs - how to correct inject service from another module that is not depending?Angularjs - 如何更正来自另一个不依赖的模块的注入服务?
【发布时间】:2014-06-30 04:05:47
【问题描述】:

我不明白模块化是如何工作的。

我有3个模块,它们相互依赖,如图所示。

“App”模块包括“module1”和“module2”。 “module2”包括“核心”模块。 There are source on plunker.

angular.module("core", []).factory("HelloWorld", function() {
  return function () {
    alert('Hello World!')
  }
});

angular.module("module1", []).controller("main", function(HelloWorld){
  HelloWorld();
});

angular.module("module2", ["core"]);

angular.module("app", ["module1", "module2"]);

如果我从模块核心向模块“module1”注入服务,它工作正常。但是“核心”模块不依赖于模块“module1”。为什么会这样?

【问题讨论】:

    标签: angularjs code-injection angularjs-module


    【解决方案1】:

    由于您的 App 模块依赖于 Core 模块(间接通过模块 2),因此 Core 模块中的服务在您的 App 模块(包括模块 1)内的任何位置都可用。

    这是因为 Angular 将首先加载所有模块,然后开始实例化它们的组件并解析注入的依赖项。

    然而,如果您确实需要模块 1 中的核心服务,您也应该使其依赖于核心模块。这样,如果稍后修改模块 2(或完全删除),您的应用程序不会中断,并且您的模块 1 将更加独立和可重用(例如,您可以将它与不依赖于核心模块)。

    一般来说,你不应该依赖“间接”依赖。每个模块都应显式声明其依赖项。
    Angular 足够聪明,只有在模块尚未加载时才加载它,因此没有开销。

    引自开发者指南的section on modules

    模块可以列出其他模块作为它们的依赖项。依赖于模块意味着需要在加载所需模块之前加载所需模块。换句话说,所需模块的配置块在所需模块的配置块之前执行。运行块也是如此。 每个模块只能加载一次,即使有多个其他模块需要它。

    (强调我的)

    【讨论】:

    • 这是一个人为的例子。从逻辑上讲,我希望看到一个错误,因为“core”和“module1”之间没有明确的关系。谢谢
    • @iKBAHT:不客气! (如果这回答了问题,请将其标记为已接受和/或投赞成票:))
    • @ExpertSystem 我想查看任何指向此功能文档的链接
    • @iKBAHT:我可以发布我的答案的链接:D 你指的是什么功能?
    • @iKBAHT:你看到文档链接了吗?
    猜你喜欢
    • 2015-07-21
    • 2016-08-07
    • 1970-01-01
    • 2018-03-24
    • 2015-10-06
    • 1970-01-01
    • 2020-09-04
    • 2019-01-11
    • 2020-01-27
    相关资源
    最近更新 更多