我找到了一些模块的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]
};
}
但是如何将参数值传递给模块的任何声明的提供者?
答案 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[])