У меня есть этот компонент навигации, который находится за пределами маршрутизатора, он использует многократно используемый значок, который использует абсолютный URL-адрес для указания на значки SVG, который извлекается через метод получения внутри компонента:
public get absUrl(): string {
return window.location.href.split('#')[0];
}
К сожалению, после перенаправления представление не обновляется с новым abs url, когда вызывается из охраны.
Я сделал обходной путь с setTimeout, но он супер хакерский - просто чтобы продемонстрировать, что есть некоторая задержка в цепочке, которая вызывает проблему, поскольку в конечном итоге значение для window.location.href
является правильным.
Вот обходной путь:
public absUrl = window.location.href.split('#')[0];
ngAfterViewInit() {
setTimeout(() => {
this.absUrl = window.location.href.split('#')[0];
this.ref.detectChanges();
}, 200);
}
- Только при загрузке всего приложения по защищенному маршруту попытка последующего доступа к защищенному маршруту после загрузки приложения будет работать нормально.
- Это происходит при загрузке всего приложения по несуществующему маршруту и при перенаправлении на / 404
- Если установить тайм-аут 0 - 100 мс, он не будет обновляться во времени
- Компонент загружается через роутер-розетка работает, abs url внутри иконок обновляется точно.
У кого-нибудь есть идеи как правильно реализовать этот? Я догадываюсь, что это связано с тем, как приложение загружается в первый раз, если вы пытаетесь загрузить защищенный маршрут.