Определение маршрутов¶
30.09.2026
Маршруты задают основу навигации внутри приложения Angular.
Что такое маршруты?¶
В Angular маршрут — объект. Он задаёт, какой компонент отрисовать для конкретного пути или шаблона URL, и дополнительные параметры того, что происходит при переходе пользователя на этот адрес.
Базовый пример маршрута:
1 2 3 4 5 6 | |
Для этого маршрута при переходе на путь /admin приложение показывает компонент AdminPage.
Как хранить маршруты в приложении¶
В большинстве проектов маршруты выносят в отдельный файл, в имени которого есть routes.
Набор маршрутов выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Если проект создан через Angular CLI, маршруты заданы в src/app/app.routes.ts.
Подключение маршрутизатора к приложению¶
При запуске приложения Angular без Angular CLI в конфигурацию передают объект с массивом providers.
В массив providers маршрутизатор добавляют вызовом provideRouter со списком маршрутов.
1 2 3 4 5 6 7 8 9 10 11 | |
Пути URL маршрутов¶
Статические пути URL¶
Статические пути — маршруты с заранее заданным адресом, который не меняется из-за динамических параметров. Такой маршрут точно совпадает со строкой path и всегда приводит к одному результату.
Примеры:
- "/admin"
- "/blog"
- "/settings/account"
Пути URL с параметрами маршрута¶
Параметризованные адреса задают динамические пути: на один компонент ведёт несколько адресов, а данные на экране зависят от параметров в адресе.
Такой шаблон задают параметрами в строке path: перед именем каждого параметра ставят двоеточие (:).
Параметры пути и сведения в строке запроса — разные вещи. Подробнее о параметрах запроса в Angular.
В примере ниже компонент профиля показывается по идентификатору пользователя из адреса.
1 2 3 4 | |
Адреса вроде /user/leeroy и /user/jenkins отрисовывают компонент UserProfile. Компонент читает параметр id и выполняет дальнейшую работу, например загрузку данных. Как читать параметры маршрута, описано в разделе Чтение состояния маршрута.
Допустимое имя параметра маршрута начинается с буквы (a-z, A-Z) и содержит только:
- буквы (a-z, A-Z)
- цифры (0-9)
- подчёркивание (_)
- дефис (-)
Путь может содержать и несколько параметров:
1 2 3 4 5 6 7 8 | |
С таким путём по адресам /user/leeroy/youtube и /user/leeroy/bluesky открывается лента соответствующей соцсети для пользователя leeroy.
Как читать параметры маршрута, описано в разделе Чтение состояния маршрута.
Подстановочные маршруты¶
Чтобы поймать все адреса для заданного пути, используют подстановочный маршрут: его задают двойной звёздочкой (**).
Частый пример — компонент страницы «не найдено».
1 2 3 4 5 6 7 8 9 | |
В этом массиве приложение показывает компонент NotFound, когда пользователь открывает любой путь, кроме home и user/:id.
Подстановочные маршруты обычно ставят в конец массива маршрутов.
Как Angular сопоставляет URL¶
Порядок маршрутов важен: Angular берёт первое совпадение. Как только URL совпал с path маршрута, остальные маршруты уже не проверяются. Более конкретные маршруты ставьте раньше менее конкретных.
В примере маршруты идут от самого конкретного к самому общему:
1 2 3 4 5 6 7 | |
Если пользователь открывает /users/new, маршрутизатор Angular проходит такие шаги:
- Проверяет
''— совпадения нет - Проверяет
users/new— есть совпадение, проверка останавливается - До
users/:idдело не доходит, хотя этот путь тоже мог бы совпасть - До
usersдело не доходит - До
**дело не доходит
Перенаправления¶
Маршрут может перенаправлять на другой маршрут и не отрисовывать компонент:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Если маршрут изменили или удалили, часть пользователей всё ещё откроет устаревшую ссылку или закладку. Перенаправление отправит их на подходящий маршрут, а не на страницу «не найдено».
Заголовки страниц¶
Каждому маршруту можно задать заголовок. При активации маршрута Angular сам обновляет заголовок страницы. Задавайте осмысленные заголовки: они нужны, чтобы приложение оставалось доступным.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Свойство title страницы можно задать динамически функцией-резолвером через ResolveFn.
1 2 3 4 5 6 7 8 | |
Заголовки маршрутов также задаёт сервис, который расширяет абстрактный класс TitleStrategy. По умолчанию Angular использует DefaultTitleStrategy.
Заголовки страниц через TitleStrategy¶
Когда состав заголовка документа нужно собирать в одном месте, реализуйте TitleStrategy.
TitleStrategy — токен, которым подменяют стратегию заголовков Angular по умолчанию. Своя реализация задаёт соглашения: суффикс приложения, заголовок из хлебных крошек или заголовок из данных маршрута.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Чтобы подключить свою стратегию, зарегистрируйте её по токену TitleStrategy на уровне приложения:
1 2 3 4 5 6 | |
Провайдеры маршрута для инъекции зависимостей¶
У каждого маршрута есть свойство providers: через него зависимости содержимого этого маршрута регистрируют с помощью инъекции зависимостей.
Так удобно, когда набор сервисов зависит от того, администратор ли пользователь.
1 2 3 4 5 6 7 8 9 10 11 12 | |
В примере у пути admin есть защищённое значение ADMIN_API_KEY. Оно доступно только дочерним маршрутам этого раздела. Остальные пути к данным через ADMIN_API_KEY не обращаются.
Подробнее о провайдерах и инъекции в Angular — в руководстве по инъекции зависимостей.
Данные, связанные с маршрутами¶
Данные маршрута — дополнительные сведения, которые крепят к маршруту. По ним настраивают поведение компонентов.
Данные маршрута бывают статическими, они не меняются, и динамическими, они зависят от условий во время выполнения.
Статические данные¶
Произвольные статические данные крепят к маршруту через свойство data. Так в одном месте собирают метаданные маршрута: идентификатор аналитики, права и тому подобное.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
В примере у главной страницы и у страницы «о нас» задан свой analyticsId. Компоненты этих страниц используют его в аналитике просмотров.
Эти статические данные читают, внедрив ActivatedRoute. Подробности — в разделе Чтение состояния маршрута.
Динамические данные: ресурсы и резолверы¶
Чтобы загрузить данные для маршрута, Angular Router поддерживает реактивные ресурсы маршрута и резолверы данных:
- Загрузка данных через ресурсы: реактивная загрузка через API сигналов
Resource. - Резолверы данных маршрута: загрузка данных до активации маршрута функциями-резолверами.
Вложенные маршруты¶
Вложенные маршруты, их ещё называют дочерними, применяют для сложной навигации: у компонента есть вложенное представление, которое меняется вместе с URL.
Дочерние маршруты добавляют в любое определение через свойство children:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
В примере страница товара переключает сведения о товаре и отзывы в зависимости от адреса.
Свойство children принимает массив объектов Route.
Чтобы показать дочерние маршруты, родительский компонент (в примере это Product) содержит собственный <router-outlet>.
1 2 3 4 5 | |
Когда дочерние маршруты есть в конфигурации, а в компоненте есть <router-outlet>, переход между адресами дочерних маршрутов обновляет только вложенную точку выхода.
Что дальше¶
Источник: https://angular.dev/guide/routing/define-routes