angular - 如何在特定功能模块中创建 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 模块。
我将不胜感激这方面的任何指导。
解决方案
当您在功能模块中提供服务时,范围将仅限于该功能模块。
为了从功能模块中隐藏一些服务,您可以创建另一个作为主模块工作的模块,并将功能模块作为兄弟模块加载。像这样的东西:
app.module
- main app
- feature module 1
- feature module 2
并提供必要的事件以允许主模块和功能模块之间的通信,即 Subjects 和 BehaviorSubject
顺便说一句,stackblitz 是一种演示场景的好方法;)看看这个不是 100% 与您的问题相关的方法:https ://stackblitz.com/edit/angular-services-di-playground
推荐阅读
- php - 使用 postgresql 数据库的某些 dbms 检索的结果集与 php 或 python 结果集不匹配
- drools - 如何解决 kie-maven-plugin:7.40.0.Final:build error "Java heap space"?
- vue.js - 无法运行“vue-cli-service serve”[vue 3]
- javascript - 在同一个变量中添加日期和时间
- c# - 实体框架代码第一次自动迁移不适用于 Oracle 数据库
- .net-core - 如何禁用整个 Blazor EditForm 以及所有字段?
- javascript - 向数组添加跨度?
- case - Splunk 理解与纪元时间的差异并添加最小值
- java - ppt中Java使用poi编辑条形图
- java - 使用 spannable 分隔字符串中的单词