Как добавить к текущему маршруту и ​​навигации - Angular - PullRequest
0 голосов
/ 01 мая 2020

Я работаю в проекте Angular 9.

У меня есть таблица, которую можно использовать повторно, сейчас у меня есть два (родительских) компонента, использующих таблицу. Я хочу, чтобы пользователи могли выбирать элемент в таблице и перенаправляться на страницу сведений об этом элементе. Проблема в том, что эти таблицы находятся на двух разных маршрутах (скажем, /lists/parent1 и lists/parent2), и страница сведений является расширением этих маршрутов. Итак, если вы щелкаете по элементу для таблицы parent1, вам нужно go к маршруту /lists/parent1/details/${id}, а если вы используете таблицу parent2, вы бы go до /lists/parent2/details/${id}. Я также передаю данные о состоянии с маршрутизатором и устанавливаю queryParamsHandling.

Я думаю, что могу сделать это несколькими способами, и я пытаюсь выяснить, какой из них лучше.

  • Опция 1) Когда пользователь щелкает элемент в таблице (дочерний компонент), я заставляю компонент таблицы генерировать событие, которое заставляет родительский элемент перейти на страницу сведений. Это работает, потому что родитель знает, где его маршрут в настоящее время, поэтому я мог бы просто сделать:
this.router.navigate([`lists/parent1/details/` + row.id], {
      queryParamsHandling: "merge",
      state: { data: row }
    });

в parent1 и таким же образом в parent2. Недостатком является то, что оба родителя используют функции, которые очень похожи (дублирующий код?)


  • Опция 2) Я передаю текущий маршрут из родительского компонента в таблицу (дочерний). Это будет просто вход, и я буду использовать эту функцию в компоненте таблицы для навигации по пользователю:
goToDetails(row): void {
    this.router.navigate([`${currentRouteInput}/details/` + row.id], {
      queryParamsHandling: "merge",
      state: { data: row }
    });
  }

  • Opt3) Я нахожу текущий маршрут в конструктор компонента таблицы (с this.router.events), а затем установите его и используйте в goToDetails() fun c, использованном выше вместо входного параметра.

  • Opt4) ??? Почему-то я думал, что есть способ просто перемещаться, добавляя к текущему маршруту. Например: если вы были на маршруте /lists/parent1, я думал, что есть функция навигации маршрутизатора, такая как router.navigateFromRoute.(['/details/${id}']), и она просто будет переходить от текущего маршрута и добавлять к нему, так: /lists/parent1/details/${id}. Но единственные функции маршрутизатора, которые я вижу, это navigate() и navigateByUrl(). Это существует? Я не знаю, почему я так думал.

Один путь лучше остальных? Я хочу сохранить этот компонент таблицы многоразовым. Существует ли стандартная практика для такого типа функций?

Буду признателен за любые советы и подсказки, спасибо!

1 Ответ

2 голосов
/ 01 мая 2020

вы можете передать активированный маршрут в навигацию опции Вы вводите маршрут: AcitvatedRoute в конструктор и устанавливаете его при вызове навигации. С этим в вашей таблице вы можете позвонить this.router.navigate(row.id, {relativeTo: this.route}); Руководство для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...