我有一个Angular 5应用程序需要在应用程序实际启动之前从服务(来自VSTS)加载一些配置文件。我通过在app.module.ts中的bootstrap上加载JSON文件来实现这一点:
// above the NgModule-decorator
export function init(settingsProvider: SettingsProvider) {
return () => settingsProvider.loadConfig();
}
// in providers-array of the @NgModule decorator
providers: [{
'provide': APP_INITIALIZER,
'useFactory': init,
'deps': [SettingsProvider],
'multi': true
}
这会在settingsProvider(加载JSON文件的标准服务)中加载JSON配置文件。 现在我需要在环境变量中使用此settingsProvider的一些参数。
(让我告诉你我的 settingsProvider:)
@Injectable()
export class SettingsProvider {
private config : any;
constructor(private http: Http) {
}
public loadConfig() : Promise<any>{
return this.http.get("assets/client-config.json")
.map(res => res.json())
.toPromise()
.then(settings => {
this.config = settings
});
}
public get configuration(): any {
return this.config;
}
}
但是由于environment.ts只是一个常数,我不能在那里注入任何服务。
所以我想要的解决方案是这样的:
environment.ts
export const environment = {
production: true,
apiBaseUrl: '/',
clientId: settingsProvider.configuration.clientId, // <-- Here's the problem, because I cannot inject settingsProvider
enableAdalDebug: false
};
有没有人知道这个问题的解决方案?