Angularjs - 如何从另一个不依赖的模块中纠正注入服务?

iKB*_*AHT 10 code-injection angularjs angularjs-module

我不明白工作模块的依赖性.

我有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"]);
Run Code Online (Sandbox Code Playgroud)

如果我将模块核心的服务注入模块"module1",它可以正常工作.但"核心"模块不依赖于模块"module1".为什么会这样?

gka*_*pak 12

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

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

但是,如果您确实需要模块1中的核心服务,那么您应该使其依赖于核心模块.这样,如果模块2稍后被修改(或完全删除),您的应用程序将不会中断,并且您的模块1将更加自包含且可重用(例如,您可以将其与不依赖于核心模块).

通常,您不应该依赖"间接"依赖.每个模块都应该显式声明其依赖项.
Angular非常智能,只有在尚未加载模块时才加载模块,因此没有开销.

引用开发者指南中有关模块部分:

模块可以列出其他模块作为其依赖项.根据模块的不同,需要在加载需求模块之前加载所需的模块.换句话说,所需模块的配置块在需求模块的配置块之前执行.运行块也是如此.即使多个其他模块需要,每个模块也只能加载一次.

(强调我的)