功能模块中未提供注入令牌

Kir*_*aAG 2 ngrx angular

我已经为我的其余端点配置创建了注入令牌,并且在运行时为其提供多个值。如果令牌在 appmodule 中提供并在其工作的全局服务中使用,但是如果我尝试在功能模块中提供另一个数据并将其注入功能效果文件中,我将收到 staticinjectorerror,没有可用的提供程序。这是代码注入令牌代码

Max*_*ord 5

延迟加载模块提供的令牌在全局范围内不可访问;也就是说,它们只能在提供它们的同一模块中使用。

为了解决这个问题,您可以static forRoot(): ModuleWithProviders在功能模块中实现并将其导入到根模块中。这基本上可以让您的功能模块在根中提供一些令牌,以便全局可用,而模块的其余部分则被延迟加载。

下面是一个延迟加载功能模块的示例,该模块向全局范围提供 InjectionToken:

@NgModule({
  ...
})
export class LazyLoadedFeatureModule {

  /**
   * Provide tokens to the global scope
   */
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: LazyLoadedFeatureModule,
      providers: [
        { provide: MY_INJECTION_TOKEN, useValue: MyInjectionValue, multi: true },
      ]
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

这里它被导入到根模块中:

@NgModule({
  ...
  imports: [
    LazyLoadedFeatureModule.forRoot(),
  ],
  ...
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

希望有帮助。

  • 这真的是一个解决方案吗?我认为,这会破坏延迟加载,因为您在根模块中导入了该模块。 (7认同)