Угловая установка базы HREF во время выполнения - PullRequest
0 голосов
/ 24 января 2019

мое приложение Angular 7 развернуто на кластере серверов и развернуто на нескольких серверах:

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

Кроме того, оно также доступно на подсистеме балансировки нагрузки, которая перенаправляет запрос на доступный субсервер.:

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

Я использую PathLocationStrategy и хотел бы, чтобы он работал на всех URL-адресах.

У меня проблема с атрибутом base 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 голосов
/ 24 января 2019

Попробуйте изменить во время выполнения файл dist/index.html, добавив сценарий bash к вашему экземпляру сервера следующим образом:

#/bin/bash

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

Передать новое значение href в качестве параметра сценарию.

Надеюсь, это поможет.

0 голосов
/ 24 января 2019

Поскольку тег <base> установлен в файле index.html, вне нашего AppComponent, я не думаю, что Angular предоставит конкретную услугу, чтобы сделать это возможным. Таким образом, остается только сделать это вручную внутри AppComponent

ngOnInit() {
   const base = document.head.querySelector('base');
   base.href = 'whatever you want';
}

Это должно сделать всю работу за вас.

...