【问题标题】:How to create Angular 6 singleton services in specific feature modules如何在特定功能模块中创建 Angular 6 单例服务
【发布时间】:2019-01-22 10:32:52
【问题描述】:

总结一下我想要实现的目标:

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

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

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

我将不胜感激。

【问题讨论】:

标签: angular angular6


【解决方案1】:

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

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

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

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

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

【讨论】:

  • "当您在功能模块中提供服务时,范围将仅限于该功能模块。"是的,在延迟加载模块的情况下,所以当我有多个延迟加载模块并为它们提供服务时,它将创建多个我想避免的服务实例。我需要多个延迟加载的功能模块中的单例服务,并将其隐藏在任何其他模块中。
【解决方案2】:

为什么不只在该功能模块中提供服务?或者,如果您只在模块中的 1 个组件中真正需要它,请让该组件具有 providers: []

【讨论】:

  • 你误解了我的意思。我想在延迟加载的模块之间拥有特定服务的相同实例(共享)。
  • ahhh 这将是一个问题 :) 也许您可以在 main 中使用 BehaviorSubject 来保持您需要的内容可用于延迟加载的元素,并在延迟加载的模块中订阅它。我很确定从 main 注入的服务不会传播到延迟加载的模块
猜你喜欢
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2018-10-19
  • 2016-07-11
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多