Динамически зарегистрировать можно отключить охрану и запросить подтверждение навигации - PullRequest
0 голосов
/ 26 сентября 2018

Может ли компонент динамически зарегистрировать canDeactivate guard для себя?Главным образом, чтобы побудить / остановить пользователя от навигации с подтверждением, как Да / Нет.

Я пытаюсь сделать это, потому что рассматриваемое приложение довольно большое и компоненты рабочего процесса (пример: оплата, перевод и т. Д.)распределены по множеству различных модулей в приложении.Я не уверен, было бы хорошей идеей зарегистрировать их статически в конфигурации маршрутизатора.

Я ищу способ, с помощью которого компонент может запрашивать и контролировать навигацию, аналогичную охране.

1 Ответ

0 голосов
/ 27 сентября 2018

Компоненты не могут зарегистрировать защитные устройства маршрутизатора, однако наиболее распространенная реализация 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, тогда он будет использоваться для управления деактивацией, в противном случае навигация маршрутизатора просто продолжится.

Я бы зарегистрировал аналогичное средство защиты на компоненте верхнего уровня и позволил бы отдельным компонентам реализовать илине конкретный метод.

...