【问题标题】:Angular Dynamically loaded module needs to use root injector serviceAngular 动态加载的模块需要使用根注入器服务
【发布时间】:2019-03-05 15:47:36
【问题描述】:

我正在使用Angular 6 中的系统JS 动态加载模块,并使用与下面的链接非常相​​似的angular-cli

(Load new modules dynamically in run-time with Angular CLI & Angular 5)

动态加载的模块创建它的子注入器并创建新的服务实例,而不是使用来自根注入器的服务。

根据Angular 文档,延迟加载模块会创建自己的子注入器和服务实例。为了避免这种情况(对于单例),他们建议在延迟加载的模块中创建forRoot 静态方法并将其导入应用程序模块中。

但就我而言,由于我在运行时加载模块,因此无法在引导时导入 LazyLoadedMOdule.forRoot()。我知道哪个模块只会在运行时加载。

您能否建议保持服务单例并在动态加载的模块中使用它?

【问题讨论】:

    标签: javascript angular angular6


    【解决方案1】:

    对于需要在整个应用程序中成为单例的服务,推荐的方法是在 core 模块中定义这些服务,然后将其导入根模块 (AppModule)。

    您可以参考Angular Style Guide了解更多详细信息。

    【讨论】:

    • 这可以做到,但这里的问题是延迟加载的模块总是用新的服务实例创建单独的子注入器。处理它的唯一方法是在主应用程序中导入静态方法 forRoot,这在我的情况下是不可能的
    • 确保您没有在延迟加载的模块定义中重新注册这些服务。换句话说,它们应该在核心模块的providers部分声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2017-10-07
    • 2018-06-19
    • 2015-12-02
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多