Как оказалось, Angular действительно предлагает способ использования необязательных параметров.
Хотя это по-прежнему не решает тот факт, что при первоначальной реализации без данный параметр будет все же требовать навигации для достижения того же маршрута с параметром подарок. Я пытался избежать перезагрузки в браузере.
Спасибо @ johnsharpe за указание на это, я не знаю, как я пропустил это. Предполагаемое использование решает ситуации, требующие более сложных структур url, но это правильный ответ.
Угловые документы по необязательным параметрам
После долгих размышлений я также наткнулся на это видео Угловое руководство по параметризованным маршрутам , которое на самом деле охватывает мой вариант использования , как определить необязательный параметр в Angular, и почему вам может понадобиться использовать один для того, чтобы поддерживать функциональную навигацию браузера. Ответ о том, что Веселин Давыдов , упомянутый выше, создает проблемную историю браузера. Как? Причина объясняется примерно через 11 минут видео.
Чтобы реализовать параметр маршрута как необязательный, вы сначала определяете маршрут без дополнительного параметра. Используя мой случай в качестве примера, я определяю свой маршрут только с обязательным параметром :name
:
{ path: 'list/:name', loadChildren: './list/list.module#ListModule'},
И затем при переходе на этот маршрут из моего приложения я могу определить необязательный параметр :type
, как, например, используя объект с парами ключ / значение:
this.router.navigate['list', name, {type:value}];
вместо этого:
this.router.navigate['list', name, type];
Этот подход использует матричную нотацию URL. Полученный URL имеет точку с запятой и выглядит так:
mysite.com/list;type=value
При совместном использовании и / или перезагрузке этого результирующего URL-адреса Angular выберет параметр матрицы и сделает его доступным в качестве параметра маршрута.
По иронии судьбы, использование параметра матрицы имеет и другие последствия, и как таковой это может быть нецелесообразным подходом. Подробнее см. вопрос / ответ .
Итак, вы можете подумать, как я, тогда какая разница? почему бы просто не использовать вместо этого параметр строки запроса? см. Различие между матрицей и запросом