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