快速版 - 我相信我想要的东西:
如何配置angular2 http
服务以忽略<base href>
更长的版本 - 如果有更好的方法: 在我的项目中,我们使用Apache提供两个角度应用程序:
http://host/index.html - angular 1
http://host/ng2/index.html - angular 2
他们都使用相同的端点
http://host/api/foo
两个应用都使用相同的虚拟主机。 angular 2应用程序位于磁盘上的public / ng2下。
问题归结为:
当我使用:<base href="/ng2/">
时,角度应用程序加载正常。
但是,使用http服务对api的所有请求都会受到污染。
http.get('/api/foo/2') goes to http://host/ng2/api/foo
我目前的解决方案是将base href设置为<base href="/">
并将除index.html之外的所有angular2文件直接放在/ public下。 (index.html仍在/ public / ng2中)这样可行,但它很乱。
我想拥有什么:
<base href="/ng2/">
或其他Apache配置而起作用)不能对网址进行硬编码
答案 0 :(得分:1)
最后我做了Ki Jey的建议并使用绝对URL来获取API。
service.base.ts:
protected getAbsoluteUrl(relativeUrl : String) : String {
return document.location.protocol + "//" + document.location.host + "/" + relativeUrl
}
service.ts:
class service extends BaseService
getTheFoo(){
http.get(this.getAbsoluteUrl(foo/2))...
}
答案 1 :(得分:1)
仅将'/'
附加到api调用将停止附加baseHref
的值。
getFoo(): Observable<any> {
const url = '/' + 'api/foo';
return this.http.get<any>(url);
}