Route. Контроль навигации с помощью сервиса
Интерфейс CanDeactivate применяется классом, который должен принимать решение, можно ли деактивировать роут. Напишем сервис реализующий интерфейс CanDeactivate:
import { Observable } from "rxjs/Observable";
import {
CanDeactivate,
ActivatedRouteSnapshot,
RouterStateSnapshot
} from "@angular/router";
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(
component: CanComponentDeactivate,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
return component.canDeactivate ? component.canDeactivate() : true;
}
}
Сервис не знает деталей реализации метода деактивации у компонента. Он только проверяет, что у компонента есть метод canDeactivate() и запускает его.
Класс реализует интерфейс CanComponentDeactivate:
export class EditServerComponent implements OnInit, CanComponentDeactivate {
//...
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (!this.allowEdit) {
return true;
}
const isSettingsChanged = this.serverName !== this.server.name
|| this.serverStatus !== this.server.status;
if (isSettingsChanged
&& !this.changesSaved) {
return confirm('Do you want discard the changes?');
} else {
return true;
}
}
}
Routes должен содержать ключ canDeactivate с именем сервиса:
{
//...
children: [
//...,
{
path: ':id/edit',
component: EditServerComponent,
canDeactivate: [CanDeactivateGuard]
},
]
}
Сервис нужно зарегистрировать в провайдерах модуля.
Помощь сайту
ЮMoney:
4100 1180 7209 833
Карта Сбербанк:
2202 2080 6183 7127
Формы. Реактивный подход.
Формы. Шаблонный подход.
Формы в Angular
Subject
Observable. Subscribe и Unsubscribe
Route. Обновление шаблона
Route Resolving
Route передача статичных данных
Route. Контроль навигации с помощью сервиса
Route. Защита роутера
Route. Вынос настроек роутера
Route. Переключения и параметры
JavaScript операторы
Сервисы
Структурные директивы
Binding свойств директив
HostListener и HostBinding
Директива атрибута
Навигация. Передача данных событиями
События и жизненный цикл
ng-content
Инкапсуляция стилей и ссылки
Связывание свойств и событий
Компонент и модель
Директива ngFor
Angular CSS и Style
Динамические шаблоны в Angular
События
Компонент и данные
Шаблон и стили компонента
Создание компонентов в Angular
TypeScript, Bootstrap, Main.ts
Установка и первый запуск Angular
Возможно, вам будет интересно
Компонент и модель
Angilar создание обычных и вложенных компонентов через CLI. Описание модели.
Инкапсуляция стилей и ссылки
Режимы инкапсуляции стилей, локальная ссылка в шаблоне Angular. Доступ к шаблону и DOM из компонента с помощью @ViewChild и @ContentChild.
Route. Вынос настроек роутера
Пример переноса роутинговой конфигурации Angular5 в отдельный файл
Навигация. Передача данных событиями
Навигация в Angular на основе событий. Передача данных между вложенными компонентами с помощью событий в Angular