我试图将我的Angular 4应用程序容器化。逻辑是,当Docker容器启动时,它首先执行一个python脚本,该脚本在assets目录中创建一个config.json文件,并使用从容器的环境变量中读取的值填充键/值对。 。然后,网络服务器实际上就开始了。
我的AppComponent加载此config.json文件,并将环境中的值替换为文件中的值:
import { Component, OnInit } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc';
import { environment } from '../environments/environment';
import { Http } from '@angular/http';
@Component({
selector: 'ncmt-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
title = 'NCMT';
constructor(
private oAuthService: OAuthService,
private http: Http) {
this.http.get('assets/config.json')
.map(res => res.json())
.toPromise()
.then((config) => {
if (config.issuer !== "default") {
environment.issuer = config.issuer;
console.log("Setting Issuer to " + config.issuer);
}
if (config.apiBaseUrl !== "default") {
environment.apiBaseUrl = config.apiBaseUrl;
console.log("Setting API Base Url to " + config.apiBaseUrl);
}
if (config.clientVersion !== "0.0.0") {
environment.clientVersion = config.clientVersion;
console.log("Setting Client version to " + config.clientVersion);
}
environment.user_info_endpoint = environment.issuer + "/connect/userinfo";
console.log("Environment settings:");
console.log(environment);
this.loadDiscoveryDocument();
}).catch(reason => this.loadDiscoveryDocument());
}
我遇到的问题是,在AppComponent获取更改以拉取config.json并实际更改环境变量之前,某些组件已经尝试执行诸如从API中提取数据之类的操作。
有没有办法阻止应用程序加载任何其他组件,直到完成config.json的工作?