Справочник по маршрутизатору
В следующих разделах рассмотрены некоторые основные понятия и термины, связанные с маршрутизатором.
События маршрутизатора
При каждой навигации Router передаёт события навигации через свойство Router.events. Эти события перечислены в следующей таблице.
| Событие маршрутизатора | Описание |
|---|---|
NavigationStart
| Возникает при начале навигации. |
RouteConfigLoadStart
| Возникает перед тем, как Router лениво загружает конфигурацию маршрута. |
RouteConfigLoadEnd
| Возникает после ленивой загрузки маршрута. |
RoutesRecognized
| Возникает, когда маршрутизатор анализирует URL и распознаёт маршруты. |
GuardsCheckStart
| Возникает, когда маршрутизатор начинает этап проверок при маршрутизации. |
ChildActivationStart
| Возникает, когда маршрутизатор начинает активировать дочерние маршруты. |
ActivationStart
| Возникает, когда маршрутизатор начинает активировать маршрут. |
GuardsCheckEnd
| Возникает, когда маршрутизатор успешно завершает этап проверок при маршрутизации. |
ResolveStart
| Возникает, когда маршрутизатор начинает этап разрешения данных при маршрутизации. |
ResolveEnd
| Возникает, когда маршрутизатор успешно завершает этап разрешения данных при маршрутизации. |
ChildActivationEnd
| Возникает, когда маршрутизатор завершает активацию дочерних маршрутов. |
ActivationEnd
| Возникает, когда маршрутизатор завершает активацию маршрута. |
NavigationEnd
| Возникает после успешного завершения навигации. |
NavigationCancel
| Возникает, когда навигация отменяется. Это может произойти, если защита маршрута возвращает false во время навигации или перенаправляет пользователя, возвращая UrlTree или RedirectCommand. |
NavigationError
| Возникает, если навигация завершается сбоем из-за непредвиденной ошибки. |
Scroll
| Представляет событие прокрутки. |
Если включить функцию withDebugTracing, Angular будет выводить эти события в консоль.
Терминология маршрутизатора
Ниже приведены основные термины, связанные с Router, и их значения:
| Компонент маршрутизатора | Описание |
|---|---|
Router | Отображает компонент приложения для активного URL. Управляет навигацией от одного компонента к следующему. |
provideRouter | предоставляет необходимые провайдеры сервисов для навигации по представлениям приложения. |
RouterModule | Отдельный NgModule, предоставляющий необходимые провайдеры сервисов и директивы для навигации по представлениям приложения. |
Routes | Задаёт массив Routes, каждый элемент которого сопоставляет путь URL с компонентом. |
Route | Определяет, как маршрутизатор должен переходить к компоненту в зависимости от шаблона URL. Большинство маршрутов состоят из пути и типа компонента. |
RouterOutlet | Директива (<router-outlet>), которая указывает место отображения представления маршрутизатором. |
RouterLink | Директива для привязки маршрута к кликабельному элементу HTML. Щелчок по элементу с директивой routerLink, привязанной к строке или массиву параметров ссылки, запускает навигацию. |
RouterLinkActive | Директива для добавления и удаления классов элемента HTML, когда связанная директива routerLink, находящаяся на элементе или внутри него, становится активной или неактивной. Она также может задавать aria-current активной ссылки для повышения доступности. |
ActivatedRoute | Сервис, предоставляемый каждому компоненту маршрута и содержащий сведения о маршруте, такие как параметры маршрута, статические данные, данные разрешения, глобальные параметры запроса и глобальный фрагмент. |
RouterState | Текущее состояние маршрутизатора, включающее дерево активированных маршрутов и вспомогательные методы для обхода этого дерева. |
| Массив параметров ссылки | Массив, который маршрутизатор интерпретирует как инструкцию маршрутизации. Его можно привязать к RouterLink или передать в качестве аргумента методу Router.navigate. |
| Компонент маршрутизации | Компонент Angular с RouterOutlet, который отображает представления в соответствии с навигацией маршрутизатора. |
<base href>
Для навигации маршрутизатор использует браузерный механизм history.pushState. pushState позволяет настраивать пути URL внутри приложения; например, localhost:4200/crisis-center. URL-адреса внутри приложения могут быть неотличимы от URL-адресов сервера.
Современные браузеры с поддержкой HTML5 первыми получили поддержку pushState, поэтому многие называют такие URL-адреса URL-адресами «в стиле HTML5».
ПОЛЕЗНО: По умолчанию маршрутизатор использует навигацию в стиле HTML5. В разделе Стратегия LocationStrategy и стили URL браузера вы узнаете, почему предпочтителен стиль HTML5, как настроить его поведение и при необходимости перейти к более старому стилю с хешем (#).
Чтобы маршрутизация pushState работала, необходимо добавить в index.html приложения элемент <base href>. Браузер использует значение <base href> как префикс относительных URL-адресов при обращении к файлам CSS, скриптам и изображениям.
Добавьте элемент <base> сразу после тега <head>. Если папка app является корнем приложения, как в данном приложении, задайте значение href в index.html, как показано ниже.
<base href="/" />
URL-адреса HTML5 и <base href>
В приведённых далее рекомендациях будут упоминаться разные части URL-адреса. На этой схеме показано, какие именно части имеются в виду:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
Хотя по умолчанию маршрутизатор использует стиль HTML5 pushState, эту стратегию необходимо настроить с помощью <base href>.
Предпочтительный способ настройки стратегии — добавить тег элемента <base href> в <head> index.html.
<base href="/" />
Без этого тега браузер может не загрузить ресурсы (изображения, CSS, скрипты) при переходе по глубокой ссылке в приложение.
Некоторые разработчики могут не иметь возможности добавить элемент <base>, например, если у них нет доступа к <head> или index.html.
Эти разработчики всё равно могут использовать URL-адреса HTML5, выполнив следующие два шага:
- Укажите для маршрутизатора подходящее значение
APP_BASE_HREF. - Используйте корневые URL-адреса (URL-адреса с
authority) для всех веб-ресурсов: CSS, изображений, скриптов и HTML-файлов шаблонов.-
Значение
<base href>pathдолжно заканчиваться символом «/», поскольку браузеры игнорируют символы вpath, следующие за последним справа «/» -
Если
<base href>содержит частьquery,queryиспользуется только в том случае, еслиpathссылки на странице пусто и не содержитquery. Это означает, чтоqueryв<base href>включается только при использованииHashLocationStrategy. -
Если ссылка на странице является корневым URL-адресом (содержит
authority),<base href>не используется. Таким образом,APP_BASE_HREFс полномочиями сервера приведёт к тому, что все ссылки, созданные Angular, будут игнорировать значение<base href>. -
Фрагмент в
<base href>никогда не сохраняется
-
Более подробную информацию о том, как <base href> используется для построения целевых URI, см. в разделе RFC, посвящённом преобразованию ссылок.
Стратегия HashLocationStrategy
Используйте HashLocationStrategy, передав useHash: true в объекте в качестве второго аргумента метода RouterModule.forRoot() в AppModule.
providers: [provideRouter(appRoutes, withHashLocation())];
При использовании RouterModule.forRoot настройка задаётся с помощью useHash: true во втором аргументе: RouterModule.forRoot(routes, {useHash: true}).
Super-powered by Google ©2010–2025.
Code licensed under an MIT-style License. Documentation licensed under CC BY 4.0.
https://angular.dev/guide/routing/router-reference