构建Angular项目时能否在代码中检索--base-href参数值?

时间:2019-06-28 08:44:13

标签: angular typescript angular-cli

对于我的Angular项目,我有多个环境,每个环境用于特定的DTAP阶段。在构建此Angular项目时,我将--base-href标志设置为相应的基本URL。但是,我在代码中也设置了一个URL,该URL属于与之对应的第二个Web服务器。该Web服务器还具有多个DTAP阶段。因此,我希望能够在代码中“知道”哪个--base-url标志值设置为能够将变量设置为第二个Web服务器的相应URL。

由于我在这个问题上找不到任何东西,因此无法取得任何成功。现在,我已经设置好它,所以我必须手动更改变量的值。但是我想摆脱这种做法,因为在构建项目时很容易忘记它。

想法是必须遵循以下代码:

    let url;
    if (base-href.contains('test'))
        url = 'https://test.com';
    else if (base-href.contains('acceptance'))
        url = 'https://acceptance.com'
    else if (base-href.contains('deployment'))
        url = 'https://deployment.com'

    // Send API call to URL

我用来构建的URL是固定的,因此我知道其中将包含什么文本,以便确保始终正确设置第二个Web服务器的URL。

如果有人能指出我正确的方向来实现这一目标,将不胜感激!

2 个答案:

答案 0 :(得分:0)

您可以在environment.ts中添加另一个变量。 编译时,将根据环境设置该值,从而允许在代码中引用该变量。

export const environment = {
  production: true,
  host: 'test'
};

在您的组件中:

import { environment } from '../environments/environment';


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  constructor() {}

  ngOnInit() {
    if (environment.host == 'test') {
      // whaever
    }
  }

}
  • 请注意,使用环境并不是您真正想做的事情,因为这意味着在e 环境A 上运行的代码与在环境B < / strong>根据环境进行编译。

更好的方法是,在应用加载时调用http请求,获取纯json文件/ db记录,并将这些设置保存在服务器上。这样,您就可以复制粘贴经过测试验证的代码,直接将其粘贴到生产环境中(不包括json文件),并且可以正常工作。

更多信息,请访问: Dave M Bush's article - where-to-store-angular-configurations

答案 1 :(得分:0)

最后,此问题的解决方案非常简单,不一定与--base-href有关。

我解决此问题的方法不是在构建Angular项目时通过查找--base-href,而是通过在应用程序已经运行时查看URL:

public static url: string = location.href.indexOf('test') > -1             // Test environment
                             || location.href.indexOf('localhost') > -1    // Local environment
                            ? 'https://test.com'
                            : location.href.indexOf('staging') > -1        // Staging environment
                            ? 'https://staging.com'
                            : location.href.indexOf('demo') > -1           // Demo environment
                            ? 'https://demo.com'
                            : 'https://deployment.com';                    // Deployment environment

由于这些URL是静态的并且不会更改,因此我相信这些设置足以查看需要使用哪个URL。