如何将 forRoot() 模块方法的参数传递给提供程序?



我找到了一些模块的forRoot((方法的例子,如下所示:

export class CoreModule {
constructor(
@Optional()
@SkipSelf()
parentModule: CoreModule
) {
if (parentModule) {
  throw new Error(
    'CoreModule is already loaded. Import it in the AppModule only'
  );
 }
}
static forRoot(someParameters?:string[]): ModuleWithProviders {
  return {
  ngModule: CoreModule,
  providers: [AnProvider1, AnProvider2]
 };
}

但是如何将参数值传递给模块的任何声明提供程序?

使用 InjectionToken 向注入器注册参数。然后在InjectionToken中使用 DI 传递和 deps 属性,如下所示:

export const Params= new InjectionToken<string[]>('params');
...
static forRoot(someParameters?:string[]): ModuleWithProviders {
  return {
  ngModule: CoreModule,
  providers: [
            { provide: Params, useValue: someParameters },
            { provide: AnProvider1, useClass: AnProvider1, deps:[Params] },
            AnProvider2
  ]
};

在组件构造函数中,使用以下InjectionToken

constructor(@Inject(Params) someParameters: string[])

相关内容

最新更新