У меня очень странная проблема: index.html
<navigation-menu *ngIf="isLoggedIn"></navigation-menu>
<div class="content-wrapper" [ngClass]="{'fullContent' : !isLoggedIn}">
<section class="content">
<router-outlet></router-outlet>
</section>
</div>
Навигационное меню является компонентом навигационного меню. В содержимом маршрутизатора-выхода есть компонент, называемый "активы".
Что я сделал в компоненте активов:
import { ActivatedRoute}from "@angular/router";
constructor(private route: ActivatedRoute){}
public ngOnInit(): void {
this.route.params.subscribe(params => {
const id = params["id"];
}
Это работает, и я получаю параметры своего маршрута (который является своего рода "актив/: id" ).
Теперь я попробовал то же самое в своем компоненте навигационного меню (который находится "снаружи" в розетке маршрутизатора) и в глобальной службе, называемой contextservice. Тот же код, что и выше, но он даже не срабатывает при изменении маршрута. Если я попытаюсь получить текущий моментальный снимок маршрутизатора
const strId = this.route.snapshot.params["id"];
после того, как событие NavigationEnd было запущено, это тот же результат: strId - undefined, потому что params - пустой объект.
Он работает только в моем компоненте активов. Работает ли это так, как предполагалось, или как это должно быть обработано?
Мое намерение состояло в том, чтобы инициировать событие из глобальной службы (или "глобального" компонента, такого как навигационное меню), которое прослушивает все изменения маршрута (-params).
Моим единственным решением было бы разобрать полный URL-адрес после каждого события NavigationEnd, которое, на мой взгляд, не является правильным способом... Или обрабатывать изменения параметров в каждом дочернем компоненте (в самом маршрутизаторе).
Возможно, у меня есть только основная ошибка в понимании...
Спасибо
Решение принятого ответа:
this.router.events.subscribe(val => {
if (val instanceof RoutesRecognized) {
var strId = val.state.root.firstChild.params["id"];
}});
Не забудьте импортировать RoutesRecognized из angular router!!