Дочерние маршруты¶
В прошлых темах рассматривалась работа с обычными маршрутами. То есть система маршрутизации выбирает один из компонентов на основе url
и помещает его в главный компонент AppComponent
. Но что если выбранный компонент сам должен принимать в качестве внутреннего содержимого какой-то другой компонент в зависимости от запроса. В этому случае нам надо использовать дочерние маршруты (child route).
К примеру, возьмем проект из прошлых тем:
Добавим в папку src/app
два простеньких компонента. Вначале добавим файл item.details.component.ts
:
1 2 3 4 5 6 7 |
|
И также добавим второй файл item.stat.component.ts
:
1 2 3 4 5 6 7 |
|
Итак, есть два компонента ItemDetailsComponent
и ItemStatComponent
, которые условно раскрывают различные стороны одно и того же товара. Логически они относятся к ItemComponent
, который также связан с определенным товаром.
Мы бы могли определить прямые маршруты к этим компонентам типа:
1 2 |
|
Где в данном случае id
— также параметр маршрута, представляющий условный id
товара.
Но такие маршруты будут миновать компонент ItemComponent
и никак его не затрагивают. Поэтому нам надо использовать другую организацию маршрутов. Для этого изменим модуль AppModule
следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
Каждый из дочерних маршрутов сопоставляется не совсем адресом url
, а только с его частью. Далее чтобы применить такие маршруты, у маршрута для компонента ItemComponent
применяется свойство children
:
1 |
|
Теперь изменим ItemComponent
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Для вставки компонентов ItemDetailsComponent
и ItemStatComponent
здесь определен элемент <router-outlet></router-outlet>
.
И изменим главный компонент AppComponent
, добавив в него для тестирования ссылки на ItemDetailsComponent
и ItemStatComponent
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
При переходе по подобным ссылкам будет срабатывать маршрутизация к компоненту ItemComponent
и ему будет передаваться параметр маршрута — id
. И также будет срабатывать маршрутизация к ItemDetailsComponent
или ItemStatComponent
, если после id
идет какой-нибудь сегмент details
или stat
: