10

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

我有 3 个模块,它们相互依赖,如图所示。 在此处输入图像描述

“App”模块包括“module1”和“module2”。“module2”包括“核心”模块。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”。为什么会发生?

4

1 回答 1

12

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

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

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

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

引用开发人员指南关于模块的部分

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

(强调我的)

于 2014-06-30T05:32:33.950 回答