Angular中APP_INITIALIZER在惰性加载模块中是否起作用?

14

我有一个懒加载模块,我尝试添加APP_INITIALIZER但它没有触发。 我的主应用程序与其语法完全相同,可以按预期工作。 懒加载模块会触发APP_INITIALIZER吗?


我不这么认为 https://stackoverflow.com/questions/40522938/lazy-loading-module-with-app-initializer。仔细想想,因为它被称为**APP**_INITIALIZER,所以这是有道理的。 - David
3个回答

22

很遗憾,APP_INITIALIZER不会在惰性加载的模块中被调用,因为应用程序已经在此之前初始化。

现在你可以这样做:

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

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

这种方法有两个限制:

  • 你只能在内部使用同步调用。
  • 当构造函数被调用时,模块还没有初始化,所以你不能动态地向在此定义的组件添加路由(这是我想做的,但很遗憾不能实现)。

未来可能有帮助的内容:

关于引入一个MODULE_INITIALIZER,在模块初始化后调用它的GitHub上正在进行讨论,这将解决这些限制。也许你可以帮助它引起开发者的注意?


3

1
关于惰性加载路由或常规路由的路由守卫CanLoadCanActivate,你可以在模块加载之前在守卫中实现你的逻辑,但始终要从守卫 Observable 中返回以在模块初始化逻辑完成后加载此模块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接