Angular APP_INITIALIZER 是否在延迟加载的模块内工作

bra*_*ley 5 lazy-loading initialization angular

我有一个延迟加载的模块,我正在尝试添加 APP_INITIALIZER 但它没有触发。我的语法与我的主应用程序完全相同,它按预期工作。延迟加载的模块是否会触发 APP_INITIALIZER?

hoe*_*eni 8

不幸的是 APP_INITIALIZER 没有在延迟加载的模块中调用,因为应用程序之前已经初始化。

你现在可以做什么:

您可以简单地利用模块的构造函数,该模块在模块初始化后立即调用,并由注入器进行全面处理:

@NgModule({
    ...
})
export class MyModule {
  constructor( <INJECTIONS> ) {
    console.log('Module initialized');
  }
}
Run Code Online (Sandbox Code Playgroud)

这种方法有两个限制:

  • 你只能在里面使用同步调用
  • 当构造函数被调用时,模块尚未初始化,因此,例如,您不能动态地向此处定义的组件添加路由(遗憾的是,这是我想要做的)

将来可能有什么帮助:

在 GitHub 上有一个关于引入 MODULE_INITIALIZER的持续讨论,该模块在模块初始化后被调用,这将解决这些限制。也许您可以帮助它获得开发人员的注意?


Dav*_*vid 3

来自文档 https://angular.io/api/core/APP_INITIALIZER

应用程序初始化时将执行的函数

该应用程序仅初始化一次,从主模块(引导的模块)开始