Как передать некоторые дополнительные динамические данные между угловыми маршрутами?

#angular

#angular

Вопрос:

Как передать некоторые дополнительные данные между угловыми маршрутами:

   navigateToItem(item: Item) {
    this.router.navigate(
      ['itemss', item.name],
      { state: { data: { id: item.id } } }
    );
  }
  

Похоже, мы можем передать Navigation Extras , как в приведенном выше методе.

Но как я могу получить доступ к этому в целевом маршруте.

Я также использую ngrx-router-store . (если это также можно сделать с помощью хранилища маршрутизаторов ngrx, пожалуйста, предложите это также, но не обязательно)

Если вы передаете некоторые дополнительные динамические данные отдельно от params или queryparams , пожалуйста, предложите это. (потому что я не хочу отображать дополнительные параметры, подобные id или любые дополнительные данные во фрагменте url.)

Поэтому мне нужно передать их и получить к ним доступ, как указано выше

Комментарии:

1. Я не уверен, почему в angular нет такого механизма для передачи некоторых дополнительных скрытых данных (т. Е. которые не отображаются в строке url) между маршрутами (вместо использования сервисов), даже у react и vue есть такая возможность.

Ответ №1:

Функция getCurrentNavigation, представленная в маршрутизаторе, — это то, что вы ищете. Убедитесь, что вы вызываете это в конструкторе компонента, к которому вы переходите, иначе информации там не будет. (Я думаю, вы все равно можете получить к нему доступ из истории)

Предпочтительным методом было бы:

 constructor(private router: Router) {
    this.itemId= this.router.getCurrentNavigation().extras.state.data.id;
}
  

Комментарии:

1. Я тоже пробовал это… Но у него есть только одна пара ключ-значение {replaceUrl: true} , больше ничего!!

2. @mex Пока вы вызываете это из конструктора, информация должна присутствовать. Не могли бы вы предоставить ссылку на stackblitz, воссоздающую проблему?

3. ДА. Я вызываю это из конструктора… Я не уверен, что происходит…

4. Не могли бы вы попробовать получить доступ через this.itemId=history.state.data.id

5. Да …. это метод, который я использую вместо этого, он работает… но мне это не нравится… Я думал, что у angular будет механизм для этого… но, похоже, нам нужно придерживаться ванильного js