运行时角度设置基本href

时间:2019-01-24 15:30:40

标签: angular routing href base

我的Angular 7应用程序部署在服务器群集中,并且部署在多个服务器上:

http://server1:8081/my-app
http://server2:8081/my-app

此外,它还可以在负载均衡器中将请求转发到可用的子服务器:

https://my-balancer.com/apps/my-app

我正在使用PathLocationStrategy,我想使其适用于所有URL。

我遇到的问题是基本href属性,因为它的值应该在运行时设置:

http://server1:8081/my-app           <-- base_href should be /my-app/
https://my-balancer.com/apps/my-app  <-- base_href should be /apps/my-app/ 

是否可以在运行时设置base_href属性,例如从location.href构建其值?

我尝试将APP_BASE_HREF提供程序添加到AppModule中,但是angular似乎忽略了它。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

由于<base>标签是在index.html之外的AppComponent文件中设置的,我认为Angular不会提供特定的服务来实现这一目标。因此,剩下的唯一选择是在AppComponent

内部手动执行此操作
ngOnInit() {
   const base = document.head.querySelector('base');
   base.href = 'whatever you want';
}

这应该为您完成工作。

答案 1 :(得分:0)

尝试在运行时通过向服务器实例中添加bash脚本来修改dist/index.html文件,如下所示:

#/bin/bash

sed -i 's/base href="\/my-app\/"/base href="'$1'"/' index.html

将新的 href 值作为参数传递给脚本。

希望有帮助。