由模块的@NgModule装饰器中的APP_INITIALIZER填充的角度使用服务

时间:2019-02-15 13:58:12

标签: angular configuration-files environment angular7

我需要使Angular应用程序环境独立,因此我在app.module.ts中实现了一个函数,该函数从文件系统中获取配置文件:

export function load(http: HttpClient, configService: ConfigService): () => Promise<boolean> {
  return (): Promise<boolean> => {
    return new Promise<boolean>(
      (resolve: (a: boolean) => void): void => {
        http
          .get('./assets/config.json')
          .pipe(
            map((config: ConfigModel) => {
              configService.config = config;
              resolve(true);
            }),
            catchError(
              (x: { status: number }, caught: Observable<void>): ObservableInput<{}> => {
                if (x.status !== 404) {
                  resolve(false);
                }
                console.log('Config file could not be loaded, thus using default configuration.');
                configService.config = configService.defaultConfig;
                resolve(true);
                return of({});
              }
            )
          )
          .subscribe();
      }
    );
  };
}

app.module.ts的providers部分中,我声明了一个提供程序,以使应用程序在应用程序启动之前加载配置:

providers: [
  ConfigService,
  {
    provide: APP_INITIALIZER,
    useFactory: load,
    multi: true,
    deps: [HttpClient, ConfigService]
  }
]

仅通过注入ConfigService并在其上调用.config即可在组件中使用动态填充的配置。

我现在遇到一个问题,我需要在forRoot()的import语句中为模块的app.module.ts方法提供配置:

imports: [
  NgMsAdalModule.forRoot(## I need configService.config.adalConfig here! ##)
]

如何使ConfigService在模块的NgModule装饰器中可用?

0 个答案:

没有答案