Компоненты не могут зарегистрировать защитные устройства маршрутизатора, однако наиболее распространенная реализация canDeactivate
полагается на метод компонента, который должен быть определен.
Версия с сокращением может быть:
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate) {
return component.canDeactivate ? component.canDeactivate() : true;
}
}
В основном, есликомпонент выставляет метод canDeactivate
, тогда он будет использоваться для управления деактивацией, в противном случае навигация маршрутизатора просто продолжится.
Я бы зарегистрировал аналогичное средство защиты на компоненте верхнего уровня и позволил бы отдельным компонентам реализовать илине конкретный метод.