对于我的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。
如果有人能指出我正确的方向来实现这一目标,将不胜感激!
答案 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
}
}
}
更好的方法是,在应用加载时调用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。