我的库中有一个主模块,我可以使用forRoot
调用并传递一些配置数据(如此处Pass config data using 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
}
]
}
}
}
我的子模块现在还需要在导入我的主模块时访问我从外部提供的选项&#34; MyModule&#34;进入应用程序/模块。
如何将我在MyModule.forRoot
中提供的ModuleOptions传递给MySubModule
?
答案 0 :(得分:2)
在这种情况下,我找不到任何官方方法,所以我找到了一种方法,但这是一种解决方法。
您可以在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};
}
}