我需要使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
装饰器中可用?