Можно ли иметь дополнительный параметр маршрута в маршруте Angular 2? Я пробовал синтаксис Angular 1.x в RouteConfig, но получил ошибку ниже:
«ORIGINAL EXCEPTION: Path» / user /: id? »Содержит«? », Что не разрешено в конфигурации маршрута.»
@RouteConfig([
{
path: '/user/:id?',
component: User,
as: 'User'
}])
javascript
angular
Йерун
источник
источник
RouteParams
не импортировать в компонент, проверьте это: stackoverflow.com/a/36792261/806202 . Решение заключается в использованииActivatedRoute
:route.snapshot.params['routeParam']
Таким образом, компонент не перерисовывается при добавлении параметра.
источник
pathMatch: 'full'
для перенаправления, в противном случае пути, такие какusers/admin
, также перенаправлены в моем случае/users/all
или/users/home
, прочитайте «all» или «home» как «id
и» и просто игнорируйте его, если оно соответствует вашему магическому значению. Затем первая строка выше становитсяredirectTo: 'users/home'
или как вы решите. Для меня косая черта действительно выделяется, как что-то не так.Рекомендуется использовать параметр запроса, когда информация является необязательной.
из https://angular.io/guide/router#optional-route-parameters
Вам просто нужно вынуть параметр из пути маршрута.
источник
Angular 4 - решение для адресации необязательного параметра:
СДЕЛАЙ ЭТО:
Обратите внимание, что
products
иproducts/:id
маршруты называются точно так же. Angular 4 будет правильно следоватьproducts
для маршрутов без параметров, а если за параметром он будет следоватьproducts/:id
.Однако путь для маршрута без параметров не
products
должен иметь косую черту, в противном случае angular будет неверно рассматривать его как путь параметра. Так что в моем случае, у меня была косая черта для продуктов, и она не работала.НЕ ДЕЛАЙТЕ ЭТОГО:
источник
data
к компоненту, который может отличаться для каждого маршрута, даже к одному и тому же компоненту. Пример{path: 'products', component: ProductsComponent, data: { showAllProducts: true} },
может быть использован, а затем вы проверитеshowAllProducts
. Немного приятнее, чем проверка на ноль, но для более простых случаев, вероятно, подойдет.Ответ Rerezz довольно хороший, но у него есть один серьезный недостаток. Это вызывает
User
компонент для повторного запускаngOnInit
метода.Это может быть проблематично, когда вы выполняете какие-то тяжелые операции и не хотите, чтобы они запускались повторно при переключении с непараметрического маршрута на параметрический. Хотя эти два маршрута предназначены для имитации необязательного параметра url, они не становятся двумя отдельными маршрутами.
Вот что я предлагаю для решения проблемы:
Затем вы можете переместить логику, отвечающую за обработку параметра, на
UserWithParam
компонент и оставить базовую логику вUser
компоненте. Все, что вы делаете,User::ngOnInit
больше не будет выполняться при переходе от / user к / user / 123 .Не забудьте поставить
<router-outlet></router-outlet>
вUser
шаблоне «S.источник
Предлагаемые ответы здесь, включая принятый ответ от rerezz, которые предлагают добавить несколько записей маршрута, работают нормально.
Однако компонент будет воссоздан при изменении между записями маршрута, то есть между записью маршрута с параметром и записью без параметра.
Если вы хотите избежать этого, вы можете создать свой собственный сопоставитель маршрутов, который будет соответствовать обоим маршрутам:
Затем используйте matcher в вашей конфигурации маршрута:
источник
С angular4 нам просто нужно организовать маршруты вместе в иерархии
Это работает для меня. Таким образом, маршрутизатор узнает, какой следующий маршрут, основываясь на параметрах идентификатора опции.
источник
Наткнулся на еще один экземпляр этой проблемы, и в поисках ее решения пришел сюда. Моя проблема заключалась в том, что я занимался детьми и ленивой загрузкой компонентов, чтобы немного оптимизировать вещи. Короче если вам лень загружать родительский модуль. Главное, что я использовал «/: id» в маршруте, и это жалобы на то, что «/» является его частью. Не точная проблема здесь, но это относится.
App-маршрутизация от родителя
Дочерние маршруты лениво загружены
источник
Я не могу комментировать, но в отношении: Angular 2 необязательный параметр маршрута
обновление для Angular 6:
См. Https://angular.io/api/router/ActivationRoute для получения дополнительной информации о маршрутизации Angular6.
источник
Столкнувшись с аналогичной проблемой с отложенной загрузкой, я сделал это:
А потом в компоненте:
Сюда:
Маршрут без
/
перенаправляется на маршрут с. Из-заpathMatch: 'full'
, только такой конкретный полный маршрут перенаправлен.Затем
users/:id
получен. Если фактический маршрут былusers/
,id
есть""
, так проверьте егоngOnInit
и действуйте соответственно; иначе,id
это идентификатор и продолжить.Остальная часть компонента действует
selectedUser
или не определена (* ngIf и тому подобное).источник