我的库中有一个主模块,可以调用它forRoot并传递一些配置数据(如此处所示,使用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
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当将主模块“ MyModule”导入应用程序/模块时,我的子模块还需要访问我从外部提供的选项。
如何将提供的ModuleOptions传递MyModule.forRoot给MySubModule?
小智 8
我找不到针对这种情况的任何官方方法,所以我找到了一种方法,但这是一种解决方法。
您可以在 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};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |