Учебник: Создание пользовательских соответствий маршрута¶
 28.02.2022
Angular Router поддерживает мощную стратегию соответствия, которую вы можете использовать, чтобы помочь пользователям ориентироваться в вашем приложении. Эта стратегия соответствия поддерживает статические маршруты, переменные маршруты с параметрами, маршруты с подстановочными знаками и так далее.
Кроме того, вы можете создавать свои собственные шаблоны для ситуаций, когда URL-адреса более сложные.
В этом руководстве вы создадите пользовательский сопоставитель маршрутов, используя UrlMatcher от Angular. Этот матчер ищет ручку Twitter в URL.
Рабочий пример финальной версии этого руководства смотрите в коде.
Задачи¶
Реализовать UrlMatcher от Angular для создания пользовательского матчика маршрутов.
Предварительные условия¶
Чтобы завершить этот учебник, вы должны иметь базовое понимание следующих концепций:
- JavaScript
- HTML
- CSS
- Angular CLI
Если вы не знакомы с тем, как работает маршрутизатор Angular, просмотрите Использование маршрутов Angular в одностраничном приложении.
Создайте пример приложения¶
С помощью Angular CLI создайте новое приложение angular-custom-route-match. В дополнение к стандартному каркасу приложения Angular вы также создадите компонент profile.
-  Создайте новый проект Angular, angular-custom-route-match. 1ng new angular-custom-route-matchКогда появится запрос Вы хотите добавить маршрутизацию Angular?, выберитеY.На вопрос Какой формат таблицы стилей вы хотите использовать?выберитеCSS.Через несколько мгновений новый проект angular-custom-route-matchбудет готов.
-  В терминале перейдите в каталог angular-custom-route-match.
-  Создайте компонент profile. 1ng generate component profile
-  В редакторе кода найдите файл profile.component.htmlи замените содержимое заполнителя на следующий HTML.1<p>Hello {{ username$ | async }}!</p>
-  В редакторе кода найдите файл app.component.htmlи замените содержимое заполнителя на следующий HTML.1 2 3 4 5 <h2>Routing with Custom Matching</h2> Navigate to <a routerLink="/@Angular">my profile</a> <router-outlet></router-outlet>
Настройте маршруты для вашего приложения¶
После установки фреймворка приложения вам нужно добавить возможности маршрутизации в файл app.module.ts. В рамках этого процесса вы создадите пользовательский URL-маршрутизатор, который будет искать Twitter handle в URL.
Этот хэндл идентифицируется предшествующим символом @.
-  В редакторе кода откройте файл app.module.ts.
-  Добавьте оператор импортадляRouterModuleиUrlMatcherот Angular.1 2 3 4 import { RouterModule, UrlSegment, } from '@angular/router';
-  В массив imports добавьте оператор RouterModule.forRoot([]).1 2 3 4 5 6 7 8 9 10 11 @NgModule({ imports: [ BrowserModule, FormsModule, RouterModule.forRoot([ /* . . . */ ]) ], declarations: [ AppComponent, ProfileComponent ], bootstrap: [ AppComponent ] })
-  Определите пользовательский маршрутный матчинг, добавив следующий код в оператор RouterModule.forRoot().1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { matcher: (url) => { if (url.length === 1 && url[0].path.match(/^@[\w]+$/gm)) { return { consumed: url, posParams: { username: new UrlSegment(url[0].path.slice(1), {}) } }; } return null; }, component: ProfileComponent }
Этот пользовательский матчер представляет собой функцию, которая выполняет следующие задачи:
- Сопоставитель проверяет, что массив содержит только один сегмент
- Сопоставитель использует регулярное выражение, чтобы убедиться, что формат имени пользователя совпадает.
- Если совпадение есть, функция возвращает весь URL, определяя параметр маршрута usernameкак подстроку пути.
- Если совпадения нет, функция возвращает null, и маршрутизатор продолжает поиск других маршрутов, соответствующих URL.
Пользовательский URL matcher ведет себя так же, как и любое другое определение маршрута. Определяйте дочерние маршруты или маршруты с ленивой загрузкой, как и любой другой маршрут.
Подписка на параметры маршрута¶
Теперь, когда пользовательский матчер установлен, вам нужно подписаться на параметры маршрута в компоненте profile.
-  В редакторе кода откройте файл profile.component.ts.
-  Добавьте оператор импортадляActivatedRouteиParamMapот Angular.1 2 3 4 import { ActivatedRoute, ParamMap, } from '@angular/router';
-  Добавьте оператор импортадля RxJSmap.1import { map } from 'rxjs/operators';
-  Подписка на параметр маршрута username.1 2 3 username$ = this.route.paramMap.pipe( map((params: ParamMap) => params.get('username')) );
-  Вставьте ActivatedRouteв конструктор компонента.1constructor(private route: ActivatedRoute) { }
Тестирование пользовательского URL-матчика¶
Теперь, когда ваш код установлен, вы можете протестировать ваш пользовательский URL matcher.
-  В окне терминала выполните команду ng serve.1ng serve
-  Откройте браузер по адресу http://localhost:4200.Вы должны увидеть единственную веб-страницу, состоящую из предложения Перейдите к моему профилю.
-  Щелкните на гиперссылке мой профиль. На странице появится новое предложение с текстом Здравствуй, Angular!.
Следующие шаги¶
Сопоставление шаблонов с помощью Angular Router обеспечивает большую гибкость при использовании динамических URL-адресов в вашем приложении. Чтобы узнать больше об Angular Router, см. следующие темы:
Этот материал основан на Custom Route Matching with the Angular Router, автор Brandon Roberts.