总结一下我想要实现的目标:
我希望能够在2个不同的延迟加载功能模块中使用单例服务。该服务不应该在其他延迟/急切加载的功能模块中可用。因此,我想以某种方式确定服务的作用域。据我所知,在angular中,我可以在所有模块中全局注册服务,或者在延迟加载模块的情况下,如果我不使用provideIn:‘根’或经典的旧forRoot逻辑,这些服务将有新的实例。
在这里您可以找到一个准备好的github项目:https://github.com/Norby125/angular-singleton
如果检查结构,从技术上讲,我有一个名为shell的公共模块,它为每个功能模块提供服务,因此这些服务对所有功能模块都是全局可用的。我有两个功能区域,分别称为sub-app1和sub-app2。在子App1中,我想拥有所有核心模块服务的相同实例,但我想让这些服务对子App2模块不可用。重要的是,区域中的所有功能都必须延迟加载,比如feature1和feature2模块。
如果能在这方面有所指导,我将不胜感激。
发布于 2018-08-15 23:12:23
当您在功能模块中提供服务时,范围将限制为该功能模块。
为了从功能模块中隐藏一些服务,您可以创建另一个作为main工作的模块,并将功能模块作为同级模块加载。如下所示:
app.module
- main app
- feature module 1
- feature module 2 并提供必要的事件以允许主模块和特征模块之间的通信。主题和BehaviorSubject
顺便说一句,stackblitz是演示场景的一种很好且简单的方法;)看看这个与你的问题不是100%相关的:https://stackblitz.com/edit/angular-services-di-playground
发布于 2018-08-15 23:14:55
为什么不只在该功能模块中提供服务呢?或者,如果您只在模块内的一个组件中需要它,请让该组件具有一个providers: []
https://stackoverflow.com/questions/51860542
复制相似问题