Параметр угловой маршрутизации недоступен

Обновлено: (решение)

Основная причина моей проблемы заключалась в том, что в app.component программно были добавлены дополнительные маршруты. Я обнаружил это, отключив все маршруты в app-routing.module, и по-прежнему загадочным образом смог перейти к рассматриваемому маршруту. После удаления программно добавленных маршрутов все заработало должным образом. Спасибо всем за помощь! :-)

ОРИГИНАЛ (вопрос):

Я использую следующий код в своем компоненте для подписки на параметры маршрута:

this.activatedRoute.params.subscribe((values) => {
  console.info('these are my parameters: ', values);
});

Все работает нормально, параметры маршрута получаю без проблем.

Это рабочая конфигурация маршрута:

{
  path: 'details/:itemId',
  component: ItemDetailsComponent,
},

Теперь к проблеме: Когда я пытаюсь упростить свой маршрут (поскольку мне не нужны другие маршруты), возникает следующая проблема: после внесения следующего простого изменения в конфигурацию маршрута я больше не могу получить доступ к параметрам маршрута (они пусты).

Это дефектная конфигурация маршрута:

{
  path: ':itemId',
  component: ItemDetailsComponent,
},

Кто-нибудь знает, почему я больше не могу получить доступ к единственному параметру маршрута после сокращения маршрута?

вы пробовали /:itemId?

Abhishek 11.01.2019 15:42

Означает ли это, что вы хотите связать ItemDetailsComponent с URL-адресом маршрута вашего приложения?

Mehdi 11.01.2019 15:43

@Mehdi да, именно так

Tobias Gassmann 11.01.2019 15:44

@Abhishek Я пробовал это, но angular жалуется на маршруты, не начинающиеся с косой черты

Tobias Gassmann 11.01.2019 15:44
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
4
539
3

Ответы 3

Похоже, вы все еще пытаетесь перейти к details/:itemId, хотя вам следовало сделать это только для :itemId. Убедитесь, что вы идете по правильному пути.

После внесения изменений /details будет работать и будет считаться itemId. Но /details/1 или любой другой такой путь приведет к ошибке.

Here's a Working Sample StackBlitz for your ref.

ваш стекблитц работает! Но в моем приложении это не работает ... Маршрут проложил вручную

Tobias Gassmann 11.01.2019 15:48

@TobiasGassmann, какой маршрут ты проложил? Скажите, пожалуйста, точный путь, по которому вы пытаетесь направить своего пользователя.

SiddAjmera 11.01.2019 15:48

www.example.com/123

Tobias Gassmann 11.01.2019 15:49

и я не могу достать "123"

Tobias Gassmann 11.01.2019 15:49

и создается экземпляр нужного компонента, я проверил это с помощью console.infos. Просто параметр маршрута отсутствует

Tobias Gassmann 11.01.2019 15:50

Не могли бы вы разветвить мою ссылку на StackBlitz и внести изменения в соответствии со своим сценарием, чтобы вы могли воспроизвести эту проблему?

SiddAjmera 11.01.2019 15:50

Я попробую, но как кажется, в stackblitz все работает нормально ...

Tobias Gassmann 11.01.2019 16:12

Работает нормально. См. Stackblitz: https://stackblitz.com/edit/angular-nqzpum

Создайте стек, пожалуйста

Sachin Gupta 11.01.2019 15:51

Кажется, я не могу воспроизвести свою локальную проблему в stackblitz .. в stackblitz все работает нормально .. Я буду продолжать попытки

Tobias Gassmann 11.01.2019 15:57

Если конфигурация маршрута находится внутри какого-либо модуля, отличного от AppModule, вам может потребоваться подписаться на родительские параметры с помощью this.activatedRoute.parent.params.subscribe.

Sachin Gupta 11.01.2019 16:00

в этом случае вам действительно не нужно указывать переменную в вашем router.module, которая должна выглядеть так:

{
  path: '',
  component: ItemDetailsComponent,
},

Затем, если вам нужно открыть конкретный элемент, используйте

this.router.navigate(["", {itemId: 123}]);

при условии, что маршрутизатор вводится как Маршрутизатор, где выполняется вызов.

Затем вам нужно ввести в свой ItemDetailsComponent ActivatedRoute: ActivatedRoute

this.activatedRoute.params.subscribe(
  (params) => {
    //ItemId will be available here when url changes
    console.info(params.itemId);
  }
);

Другие вопросы по теме