@waltaki

Angular route — как проверить на какой я странице?

Здравствуйте.

В Angular route у меня есть страница заданная так:
{ path: "support/:id", component: SupportViewComponent }

Всё работает. Но мне нужно как-то проверить, нахожусь ли я сейчас на path: "support/:id".
Нужно это для главного компонента, в который вложен этот. Его поведение немного поменяется, если я буду на "support/:id".
Рабочий сейчас вариант: в главном компоненте
public RegExpSearchNum = new RegExp(/\d/);
constructor(public route: Router) {}

<p>{{ route.url.search(RegExpSearchNum) != -1 && route.url.search('/support/') != -1 ? true : false }}</p>


Есть ли какой-то более красивый метод это сделать? Может у this.route есть какие-то функции, для подобного?
  • Вопрос задан
  • 982 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Можно сделать
this.route.events.pipe(
  map(() => this.route.currentUrlTree.root.children.primary.segments[1].path), // вместо 1 посмотреть ваш индекс
  distinctUntilChanged(), // или можно ловить только NavigationEnd
  map(path=> path === 'support')
)

И на него подписываться в компоненте.
выглядит не очень.

А можно сделать сделать сервис типа CurrentComponentService, инжектнуть его в вашем компоненте и на ngOnInit ngOnDestroy сообщать в сервис что компонент создан и удален. А в главном компоненте слушать эти события.
В этом варианте можно вообще не смотреть на роутинг, он же ведь и поменяться может.

У себя я держу сервис, который при роутинге парсит url из this.route.routerState.snapshot.url и содержит поток с текущей навигацией.

Кстати надо поменять на общий сервис с сообщениями, это выглядит более логично, чем смотреть на роутер.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы