是否共享依赖项?

时间:2015-06-04 20:12:18

标签: angularjs dependency-injection

假设我有3个模块:

angular.module('A', [])

angular.module('B', ['A'])

angular.module('C', ['B', 'A'])

在依赖注入方面,BC将共享模块A的相同实例,还是将实例分别注入每个实例?

1 个答案:

答案 0 :(得分:4)

总结一下你的问题,答案只是一个例子。

事实上就是这样。 Angular app通过注入器解决依赖关系。每个应用程序只创建一个注入器。从技术上讲,你只能有一个ng-app,但你可以通过手动引导来拥有多个应用程序,在这种情况下,将为每个应用程序创建一个注入器,这两个应用程序不会共享任何依赖项。

一般情况下,只有rootElement被引导为角度应用程序。它解析了启动已经引导的模块的模块(从依赖链的底部开始)。在该模块下注册的任何服务/控制器/过滤器等或该依赖链下的任何依赖模块将被一起捆绑在注入器高速缓存中(在注入时懒惰地实例化)。例如,假设您在模块myService下注册了服务A。无论你列出A多少个地方作为依赖,最终只有一个构造函数的实例可用,而服务是一个单独的每个人都会获得相同的单例实例。

Official Doc

  

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