angular 5,将配置数据传递给导入的子模块

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