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

时间:2018-04-29 14:17:27

标签: angular ngrx

我为我的其他端点配置创建了注入令牌,我在运行时为它提供了多个值。如果令牌在appmodule中提供并在其工作的全局服务中使用,但如果我试图在功能模块中提供另一个数据并将其注入功能特效文件中,我将获得staticinjectorerror,没有提供者可用。这是代码Injection-token code

1 个答案:

答案 0 :(得分:4)

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

要解决此问题,您可以在功能模块中实施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 },
      ]
    }
  }

}

这里它是在根模块中导入的:

@NgModule({
  ...
  imports: [
    LazyLoadedFeatureModule.forRoot(),
  ],
  ...
})
export class AppModule { }

希望有所帮助。