Учебник: Создание пользовательских соответствий маршрута¶
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.
1
ng new angular-custom-route-match
Когда появится запрос
Вы хотите добавить маршрутизацию Angular?
, выберитеY
.На вопрос
Какой формат таблицы стилей вы хотите использовать?
выберитеCSS
.Через несколько мгновений новый проект
angular-custom-route-match
будет готов. -
В терминале перейдите в каталог
angular-custom-route-match
. -
Создайте компонент profile.
1
ng 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
.1
import { map } from 'rxjs/operators';
-
Подписка на параметр маршрута
username
.1 2 3
username$ = this.route.paramMap.pipe( map((params: ParamMap) => params.get('username')) );
-
Вставьте
ActivatedRoute
в конструктор компонента.1
constructor(private route: ActivatedRoute) { }
Тестирование пользовательского URL-матчика¶
Теперь, когда ваш код установлен, вы можете протестировать ваш пользовательский URL matcher.
-
В окне терминала выполните команду
ng serve
.1
ng serve
-
Откройте браузер по адресу
http://localhost:4200
.Вы должны увидеть единственную веб-страницу, состоящую из предложения
Перейдите к моему профилю
. -
Щелкните на гиперссылке мой профиль.
На странице появится новое предложение с текстом
Здравствуй, Angular!
.
Следующие шаги¶
Сопоставление шаблонов с помощью Angular Router обеспечивает большую гибкость при использовании динамических URL-адресов в вашем приложении. Чтобы узнать больше об Angular Router, см. следующие темы:
Этот материал основан на Custom Route Matching with the Angular Router, автор Brandon Roberts.