Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在特定功能模块中创建Angular 6单例服务_Angular_Angular6 - Fatal编程技术网

如何在特定功能模块中创建Angular 6单例服务

如何在特定功能模块中创建Angular 6单例服务,angular,angular6,Angular,Angular6,总结我想要实现的目标: 我希望能够在两个不同的延迟加载功能模块中使用singleton服务。此服务不应从其他延迟/急切加载的功能模块中提供。因此,不知何故,我想确定这项服务的范围。据我所知,在angular中,我可以在所有模块中全局注册服务,或者在延迟加载模块的情况下,如果我不使用provideIn:“root”或经典的旧forRoot逻辑,这些服务将有新实例 在这里,您可以找到一个准备好的github项目: 如果你检查一下结构,从技术上讲,我有一个叫做shell的通用模块,它为每个功能模块提供

总结我想要实现的目标:

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

在这里,您可以找到一个准备好的github项目:

如果你检查一下结构,从技术上讲,我有一个叫做shell的通用模块,它为每个功能模块提供服务,因此这些服务对所有功能模块都是全局可用的。我有两个特征区域,分别称为sub-app1和sub-app2。在sub-app1中,我希望拥有所有核心模块服务的相同实例,但我希望使这些服务对sub-app2模块不可用。区域内的所有功能都必须延迟加载,如feature1和feature2模块,这一点很重要


如果您能提供这方面的指导,我将不胜感激。

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

为了对功能模块隐藏某些服务,您可以创建另一个模块作为主模块,并将功能模块作为兄弟模块加载。大概是这样的:

app.module
- main app
- feature module 1
- feature module 2 
并提供必要的事件,以允许主模块和功能模块、也称为主体和行为主体之间的通信


顺便说一句,stackblitz是演示场景的一种简单易行的方法;)看看这个与您的问题不完全相关的问题:

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

请遵循提问指南。我稍微调整了一个问题,希望现在你误解了我。我希望在延迟加载的模块之间拥有特定服务的相同实例(共享)。啊,这将是一个问题:)也许您可以主要使用BehaviorSubject来保持lazyloaded元素可用的所需内容,并在延迟加载的模块中订阅它。我很确定,从main注入的服务不会传播到lazyloaded模块,“当您在功能模块中提供服务时,范围将限于该功能模块。”是的,在延迟加载模块的情况下,因此当我有多个延迟加载模块并向他们提供服务时,它将创建我想要避免的多个服务实例。我需要在多个延迟加载的功能模块中提供一个单例服务,并对任何其他模块隐藏它。