canDeactivate в случае возврата первого false, в следующий раз true перемещается дважды - PullRequest
1 голос
/ 24 июня 2019

У меня есть какое-то всплывающее окно "Несохраненные изменения", где пользователь может отменить обратную навигацию.В этом случае, когда пользователь нажимает кнопку отмены (canDeactivate guard возвращает false), но затем пытается вернуться назад (вызывается canDeactivate), и пользователь выбирает «оставить без сохранения» (canDeactivate guard возвращает true),навигация назад происходит дважды.

компонент

  @HostListener('window:beforeunload')
  canDeactivate(): Observable<boolean> | boolean {
    return !this.unsavedChangesAvailable;
  }

охранник

  canDeactivate(
    component: BLAComponent,
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if (!component.canDeactivate()) {
      this.unsavedChangesModal = this.dialog.open(UnsavedChangesModalComponent, {
        height: 'auto',
        width: 'auto'
      });
      return this.unsavedChangesModal.afterClosed().pipe(
        map((choice: boolean) => {
          return choice;
        }));
    } else {
      return of(true);
    }
  }

модальный

 <button mat-button [mat-dialog-close]="false" cdkFocusInitial>
    {{ 'EDITOR.UNSAVED_CHANGES_MODAL.CANCEL' | translate }}</button>
    <button mat-button [mat-dialog-close]="true">{{
      'EDITOR.UNSAVED_CHANGES_MODAL.LEAVE_WITHOUT_SAVE' | translate }}
    </button>

Проблема возникает в Angular 6, но такжев последней версии 8. Я обновил его, потому что я думал, что проблема была решена (https://github.com/angular/angular/issues?utf8=%E2%9C%93&q=is%3Aissue+candeactivate+twice),, но обновление не решило проблему.

...