Angular - 修改app.component.ts中的环境并防止进一步加载

时间:2018-01-31 18:40:50

标签: angular

我试图将我的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的工作?

0 个答案:

没有答案