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

时间:2018-01-15 08:57:43

标签: angular angular-cli

我找到了一些模块的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]
 };
}

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

1 个答案:

答案 0 :(得分:5)

使用InjectionToken向进样器注册参数。然后使用带有InjectionToken属性的deps中的DI传递,如下所示:

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[])