窗口重新加载无法解决对话框承诺问题

问题描述 投票:0回答:1

在重新加载之前,我希望用户在对话框中确认重新加载。 根据结果,应用程序应该重新加载。

不幸的是,重新加载不起作用。有人有想法吗?

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();
        }
           
      }
    }
  }
}
javascript angular primeng
1个回答
0
投票

假设

fromEvent
是一个事件监听器,看起来第二个(handleOnWindowUnload)只有在第一个事件触发后才会被订阅。这意味着如果第一个尚未触发,

第一个事件侦听器在

'beforeunload'
上触发。这不是意味着当您关闭页面时,它会在之前运行吗?

PS 使用断点进行调试以查看哪些代码运行或未运行始终是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.