canDeactivate не вызывает при двойном нажатии на кнопку возврата браузера - PullRequest
2 голосов
/ 13 февраля 2020

Я давно столкнулся с одной проблемой, связанной с навигацией в браузере. Я перепробовал все возможные решения по переполнению стека, но эти решения не совсем соответствуют моим требованиям.

У меня есть требование подтвердить всплывающее сообщение во время навигации или выхода из приложения браузера. Я успешно внедрил canDeactivate guard, но все же сталкиваюсь с некоторыми проблемами. Вот пример моего кода.

 canDeactivate() {
    console.log('Route Guard Is Calling');
    if (this.isValueModified) {
      return confirm('You have unsaved changes for Roster Settings. Do you wish to proceed without saving?');
    } else {
      return true;
    }
  }

, но приведенный выше код не работает, когда у меня уже есть всплывающее окно подтверждения, и я снова нажимаю кнопку возврата браузера chrome.

Итак, я придумаю другое решение: HostListener

@HostListener('window:beforeunload', ['$event'])
  public onPageUnload($event: BeforeUnloadEvent) {
    debugger;
    console.log('Log Host Listner');
    if (this.isValueModified) {
      $event.returnValue = true;
    }
  }

Но этот hostlistner работает в соответствии с моими ожиданиями, только когда я полностью закрывая вкладку браузера. Пожалуйста, найдите прикрепленный снимок экрана моей проблемы, чтобы получить больше и лучшее разъяснение ...

enter image description here

...