Angular V12 文档学习与整理(五) - 模块/服务依赖关系
两种机制
服务(Services)与组件、指令和管道有些不同。
服务主要通过 Angular 的依赖注入 (Dependency Injection, DI) 机制进行管理和使用,而不是通过导出和导入机制进行共享。
- 组件、指令和管道需要在模块中
declarations
中声明, 在exports
中导出(如果需要被其他模块使用) - 服务可以通过自身的
@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.