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

Cri*_*ano 1 angular-cli angular

我找到了一些模块的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]
 };
}
Run Code Online (Sandbox Code Playgroud)

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

pix*_*its 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
  ]
};
Run Code Online (Sandbox Code Playgroud)

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

constructor(@Inject(Params) someParameters: string[])
Run Code Online (Sandbox Code Playgroud)