Post

Angular V12 文档学习与整理(五) - 模块/服务依赖关系

两种机制

服务(Services)与组件、指令和管道有些不同。

服务主要通过 Angular 的依赖注入 (Dependency Injection, DI) 机制进行管理和使用,而不是通过导出和导入机制进行共享。

  1. 组件、指令和管道需要在模块中 declarations 中声明, 在 exports 中导出(如果需要被其他模块使用)
  2. 服务可以通过自身的 @Injectable 规定范围, 或者在模块的 providers 属性中声明

依赖注入机制

如果一个服务是在根模块或者任何一个立即加载的模块中提供的,那么这个服务就可以在整个应用程序中使用,包括父模块, 惰性加载模块及其后代模块。 如果一个服务是在惰性加载模块中提供的,那么这个服务只能在该惰性加载模块及其后代模块中使用,而不能在整个应用程序中全局使用。

不过也可能存在服务依赖关系不明确的情况, 这个时候就要善用惰性加载模块 loadChildren: () => import('./feature/feature.module').then(m => m.FeatureModule)

声明导出的机制

在 Angular 中,模块化系统限制了模块之间的直接访问。所以,如果模块 A 导入了模块 B,而模块 B 导入了模块 C,模块 A 就不能直接使用模块 C 中导出的组件、指令或管道。它只能访问模块 B 导出的组件、指令或管道。

要在模块 A 中使用模块 C 中导出的组件、指令或管道,你需要通过模块 B 中导出的组件、指令或管道进行间接访问。或者在 B 模块中导出 C 模块, 这样 A 模块中才可以使用 C模块导出的内容

一旦模块被父模块导出, 那么父父节点就可以使用他本身导出的内容

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.