我的库中有一个主模块,我可以使用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}; } }