проверить значение подписки и вернуть его в canDeactivate - PullRequest
0 голосов
/ 20 марта 2019

В canDeactivate guard я подписан на подтверждение обслуживания.Компонент подтверждения имеет 3 кнопки, и при нажатии одной из них он выводит enum.Как проверить значение в подписке для просмотра, сделать что-то и вернуть логическое значение для защиты в зависимости от значения?

CanDeactivateGuard:

export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
      constructor(private modalDialogService: ModalService) {
      }
      canDeactivate(component: CanComponentDeactivate,
                          route: ActivatedRouteSnapshot,
                          state: RouterStateSnapshot): Observable<boolean> | boolean {
        if (!component.isUnsavedChanges()) {
          return true;
        }
        this.modalDialogService.showConfirm(ConfirmType.CAN_DEACTIVATE).subscribe(val => {
             //here I want to check value, do some functions and return true/false
    })
          }
        }

ConfirmComponent:

export class ConfirmComponent {
      subject: Subject<ConfirmAction>;

      constructor(public bsModalRef: BsModalRef) {}

      action(action: ConfirmAction):void {  //here the value of click
        this.bsModalRef.hide();
        this.subject.next(action);
        this.subject.complete();
      }
    }

    export enum ConfirmAction {
      SAVE,
      REVERT,
      CANCEl,
    }

МодалСервис:

export class ModalService {

  constructor(private bsModalService: BsModalService,
              private ts: TranslatorService) {}

  public showConfirm(modalDialogType: ConfirmType, extraInfo?: string): Observable<ConfirmAction> {
    let modal;
    switch (modalDialogType) {
      case ConfirmType.CAN_DEACTIVATE: {
        modal = this.bsModalService.show(ConfirmComponent, config);
        break;
      }
/*
other cases
*/
return modal.content.subject.asObservable();
}

1 Ответ

0 голосов
/ 20 марта 2019

canDeactivate ожидает Observable, вы можете сделать что-то вроде этого:

      canDeactivate(component: CanComponentDeactivate,
                          route: ActivatedRouteSnapshot,
                          state: RouterStateSnapshot): Observable<boolean> | boolean {
        if (!component.isUnsavedChanges()) {
          return true;
        }
        return this.modalDialogService.showConfirm(ConfirmType.CAN_DEACTIVATE).pipe(
            map(val => {
               // Here, do your work and return true or false
            })
        )
      }

Посмотрите документацию по Rxjs https://rxjs -dev.firebaseapp.com / guide / Overview

Надеюсь, это вам поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...