【问题标题】:how to share same service instance between 2 lazy loaded modules - not at root如何在 2 个延迟加载的模块之间共享相同的服务实例 - 不在根目录下
【发布时间】:2021-06-17 21:21:36
【问题描述】:

是否可以在两个延迟加载的模块之间共享同一个服务实例,而根注入器中没有提供该服务?或者至少,在被要求之前不提供?

例如我有LazyModuleALazyModuleB,正如其名,它们是懒加载的。这些模块中的每一个都需要访问相同的服务,但其他任何地方都不需要该服务。共享服务应该只在模块之间共享一个实例。此外,不应在这两个模块之外加载或访问它。

目前我通过 {providedIn: 'root'} 在根注入器中提供服务。是否可以为这两个延迟加载的模块加载此服务的相同实例?

【问题讨论】:

    标签: angular angular-services angular-lazyloading


    【解决方案1】:

    有趣,我不确定这是否可行,我自己没有尝试过,如果你有第三个模块怎么样,里面有你的服务,没有providerIn: root

    您的服务:

    @Injectable()
    export class MySharedService {
     // ... some code
    }
    

    第三个模块:

    @NgModule({
       providers: [MySharedService],
       exports: [MySharedService] // I'm not sure if this is need it 
    })
    export class ModuleC {}
    

    LazyModuleA:

    @NgModule({
       import: [ModuleC]
    })
    export class LazyModuleA {}
    

    LazyModuleB:

    @NgModule({
       import: [ModuleC]
    })
    export class LazyModuleB {}
    

    所以你的LazyModuleALazyModuleB 都导入了ModuleC,它正在导出你想要的service

    【讨论】:

    • 太棒了!不确定该服务在注入器树中的最终位置,但现在两个模块中使用的是同一个实例。非常感谢你。
    • 哦,顺便说一句,不要从 ModuleC 导出 MySharedService
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2020-09-06
    • 1970-01-01
    • 2017-08-22
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多