我的库中有一个主模块,我可以使用forRoot调用并传递一些配置数据(如此处所见)
export const MODULE_OPTIONS = new InjectionToken<ModuleOptions>('MODULE_OPTIONS');
@NgModule({
imports: [
MySubModule.forRoot(//needs access to options)
]
})
export class MyModule {
static forRoot(options: ModuleOptions = {}): ModuleWithProviders {
return {
ngModule: MyModule,
providers: [
{
provide: MODULE_OPTIONS,
useValue: options
}
]
}
}
}
当我的主模块“MyModule”导入应用程序/模块时,我的子模块现在还需要访问我从外部提供的选项.
如何将MyModule.forRoot中提供的ModuleOptions传递给MySubModule?
最佳答案 我找不到任何正式的方法,所以我找到了一种方法,但它是一种解决方法.
您可以在MyModule.forRoot函数中调用MySubModule.forRoot并分配提供程序. (但如果子模块中有组件/指令,也可以导入/导出子模块.)
export const MODULE_OPTIONS = new InjectionToken<ModuleOptions>('MODULE_OPTIONS');
@NgModule({
//You don't have to import/export if MySubmodule doesn't have any component/directive declaration.
imports: [MySubModule],
exports:[MySubModule]
})
export class MyModule {
static forRoot(options: ModuleOptions = {}): ModuleWithProviders {
//Now we are able to provide services/values that uses options in the MySubmodule.
const moduleProviders= MySubmodule.forRoot(options).providers;
moduleProviders.push({provide: MODULE_OPTIONS,useValue: options});
return {ngModule: MyModule,providers: moduleProviders};
}
}