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