在重新加载之前,我希望用户在对话框中确认重新加载。 根据结果,应用程序应该重新加载。
不幸的是,重新加载不起作用。有人有想法吗?
fromEvent(window, 'beforeunload').subscribe(e => {
e.preventDefault();
e.returnValue = false;
this.handleOnWindowUnload();
}
handleOnWindowUnload(): void {
let refreshKeyPressed = false;
let dialogOpened = false
fromEvent(document, 'keydown').pipe(take(1)).subscribe(async (e: KeyboardEvent) => {
if (e.ctrlKey && e.key == 'r') {
refreshKeyPressed = true;
if (!dialogOpened) {
const result = await new Promise<CancelMode>((resolve) => {
this.dialogService.open(DialogComponent, {
showHeader: false,
}).onClose.subscribe((cancelMode: CancelMode) => {
resolve(cancelMode);
dialogOpened = true;
})
})
if (result === CancelMode.CloseAndCancel && refreshKeyPressed) {
refreshKeyPressed = false;
dialogOpened = false;
window.location.reload();
}
}
}
}
}
假设
fromEvent
是一个事件监听器,看起来第二个(handleOnWindowUnload)只有在第一个事件触发后才会被订阅。这意味着如果第一个尚未触发,
第一个事件侦听器在
'beforeunload'
上触发。这不是意味着当您关闭页面时,它会在之前运行吗?
PS 使用断点进行调试以查看哪些代码运行或未运行始终是一个好主意。