我一直试图在DevOps上部署Angular 8应用程序,并在.json文件中使用配置,以便不为不同的环境重新构建整个应用程序。
我使用这2个帖子来创建所有配置:
Continuously Deploying Angular to Azure App Service with Azure DevOps
和堆栈溢出答案:
App.settings - the Angular way?
注意我对使用environment.ts
方式不感兴趣,因为这种方式将要求我为每种环境重新构建解决方案。
所以,我像这样准备了所有代码:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: (appConfigService: ConfigService) => {
return () => {
//Make sure to return a promise!
return appConfigService.loadAppConfig();
};
},
deps: [ConfigService],
multi: true
}
],
bootstrap: [AppComponent]
})
export class AppModule {}
我的ConfigService.ts
:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class ConfigService {
private appConfig: any;
constructor(private http: HttpClient) {}
loadAppConfig() {
return this.http.get('./assets/appconfig.json')
.toPromise()
.then(config => {
this.appConfig = config;
});
}
get apiBaseUrl() {
if (!this.appConfig) {
throw Error('Config file not loaded!');
}
return this.appConfig.apiUrl;
}
}
然后是需要加载appconfig.json信息的主要对象:
export class ApiService {
apiUrl: string;
constructor(private readonly httpClient: HttpClient,
private configService: ConfigService) {
this.apiUrl = this.configService.apiBaseUrl;
}
ngOnInit() {
this.apiUrl = this.configService.apiBaseUrl;
}
}
但是随后,在加载应用程序时,会出现此消息:
如果我调试应用程序,则appsettings.json
文件正在加载信息,但是在加载应用程序设置之前看起来好像是在进行角度初始化。
我做错了什么?
您可以返回Promise
并按以下方式在HTTP请求的subscribe
回调中解析它:
loadAppConfig() {
return new Promise((resolve) => {
this.http.get('./assets/appconfig.json').subscribe(response => {
this.appConfig = config;
resolve();
})
});
}