首页 > 解决方案 > 如何在特定功能模块中创建 Angular 6 单例服务

问题描述

总结一下我想要达到的目标:

我希望能够在 2 个不同的延迟加载功能模块中使用单例服务。其他延迟/急切加载的功能模块不应提供此服务。所以不知何故,我想确定服务的范围。据我所知,在 Angular 中,我可以在所有模块中全局注册服务,或者在延迟加载模块的情况下,如果我不使用 provideIn: 'root' 或经典旧的这些服务将有新实例forRoot 逻辑。

在这里你可以找到一个准备好的github项目:https ://github.com/Norby125/angular-singleton

如果您检查结构,从技术上讲,我有一个名为 shell 的通用模块,它为每个功能模块提供服务,因此这些服务对所有功能模块都是全局可用的。我有 2 个功能区域,称为 sub-app1 和 sub-app2。在 sub-app1 中,我希望所有核心模块服务具有相同的实例,但我想让这些服务对 sub-app2 模块不可用。重要的是,区域内的所有功能都必须延迟加载,例如 feature1 和 feature2 模块。

我将不胜感激这方面的任何指导。

标签: angularangular6

解决方案


当您在功能模块中提供服务时,范围将仅限于该功能模块。

为了从功能模块中隐藏一些服务,您可以创建另一个作为主模块工作的模块,并将功能模块作为兄弟模块加载。像这样的东西:

app.module
- main app
- feature module 1
- feature module 2 

并提供必要的事件以允许主模块和功能模块之间的通信,即 Subjects 和 BehaviorSubject

顺便说一句,stackblitz 是一种演示场景的好方法;)看看这个不是 100% 与您的问题相关的方法:https ://stackblitz.com/edit/angular-services-di-playground


推荐阅读