Angular Router: навигация с использованием RouterLink, Navigate или NavigateByUrl
Введение
В Angular RouterLink
— это директива для навигации по другому маршруту декларативно. Router.navigate
и Router.navigateByURL
— это два метода, доступные классу Router
для императивной навигации по классам компонентов. .
Давайте рассмотрим, как использовать RouterLink
, Router.navigate
и Router.navigateByURL
.
Использование RouterLink
Типичная ссылка в HTML выглядит так:
<a href="/example">
Example HTML link.
</a>
Эта примерная ссылка направит пользователя на страницу /example
.
Однако одностраничное приложение (SPA) не имеет разных страниц, на которые можно ссылаться. Вместо этого у него есть разные представления для отображения пользователю. Чтобы позволить пользователю перемещаться и изменять представление, вы можете использовать директиву RouterLink
вместо href
:
<a routerLink="/users/sammy">
Link that uses a string.
</a>
Этот пример RouterLink
направит пользователя к компоненту в /users/sammy
.
Различные сегменты URL также могут быть переданы в массиве следующим образом:
<a [routerLink]="['/', 'users', 'sammy']">
Link that uses an array.
</a>
Эти два примера имеют разный формат, но будут направлены на один и тот же компонент в /users/sammy
.
Относительные пути
Вы можете использовать ../
для перехода на более высокие уровни навигации, используя что-то вроде этого:
<a [routerLink]="['../', 'posts', 'sammy']">
Link that goes up a level.
</a>
В этом примере, если пользователь находится по адресу /users/sammy
, навигация изменится на /posts/sammy
.
К первому сегменту URL можно добавить ./
, ../
или без косой черты.
Параметры
Вы можете передать параметры навигации с объектом в списке сегментов URL:
<a [routerLink]="['/', 'users', {display: 'verbose'}, 'sammy']">
Link with parameter.
</a>
В этом примере Маршрутизатор
перейдет к /users;display=verbose/sammy
.
Именованные розетки
Вы можете указать маршрутизатору
, что поместить в именованный outlet
, примерно так:
<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'] } }]">
Link with a side outlet.
</a>
В этом примере сегмент sammy
будет помещен в outlet
с именем side
. .
Также можно указать маршрутизатору
, что размещать в нескольких именованных outlet
, примерно так:
<a [routerLink]="['/', 'users', { outlets: { side: ['sammy'], footer: ['sharks'] } }]">
Link with a side and footer outlets.
</a>
В этом примере сегмент sammy
будет помещен в outlet
с именем side
. а сегмент акулы
будет помещен в outlet
с именем footer
.
Использование маршрутизатора
В классе Router
Angular доступны два метода для императивной навигации в классах компонентов: Router.navigate
и Router.navigateByUrl
. Оба метода возвращают обещание, которое принимает значение true
, если навигация прошла успешно, null
, если навигации нет, false
, если навигация не удалась или полностью отклонено, если есть ошибка.
Чтобы использовать любой метод, сначала нужно убедиться, что класс Router
внедрен в класс вашего компонента.
Сначала импортируйте Router
в класс вашего компонента:
import { Component } from '@angular/core';
import { Router } from '@angular/router';
Затем добавьте Router
в зависимости:
@Component({
// ...
})
export class AppComponent {
constructor(private router: Router) {
// ...
}
// ...
}
Теперь вы можете использовать Router.navigate
или Router.navigateByUrl
.
Router.navigate
Вы передаете массив сегментов URL в Router.navigate
.
Вот простой пример использования метода Router.navigate
:
goPlaces() {
this.router.navigate(['/', 'users']);
}
А вот пример, демонстрирующий, как Router.navigate
затем:
goPlaces() {
this.router.navigate(['/', 'users'])
.then(nav => {
console.log(nav); // true if navigation is successful
}, err => {
console.log(err) // when there's an error
});
}
Если в этом примере Router.navigate
выполнено успешно, будет отображаться true
. Если в этом примере Router.navigate
выполнить не удалось, появится сообщение об ошибке.
Router.navigateByUrl
Router.navigateByUrl
похож на Router.navigate
, за исключением того, что вместо сегментов URL передается строка. Навигация должна быть абсолютной и начинаться с /
.
Вот простой пример использования метода Router.navigateByUrl
:
goPlaces() {
this.router.navigateByUrl('/users;display=verbose/sammy');
}
В этом примере Router.navigateByUrl
перейдет к /users;display=verbose/sammy
.
Заключение
В этой статье вы узнали о навигации в приложениях Angular. Вы познакомились с RouterLink
, Router.navigate
и Router.navigateByURL
.
Если вы хотите узнать больше об Angular, ознакомьтесь с нашей темой по Angular, где вы найдете упражнения и проекты по программированию.