Angular - @HostListener - 完全防止页面刷新

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

我正在使用 @HostListener 来防止窗口重新加载。我已经实现了如下代码 -

@HostListener('window:beforeunload', ['$event'])
unloadNotification($event: any) {
  let checkSave = true;
  for( let index = 0; index < this.data.length; index++ ) {
    if( !this.data[index].id ) {
      checkSave = false;
      break;
    }
  }

  if( !checkSave ) {
    const dialogRef = this.dialog.open(SomeComponent, {
      data: { 
        refresh: true
      }, width: '500px'
    });
 
    dialogRef.afterClosed().subscribe(result => {
      if( result.refresh ) {
        this.data = [];
        window.location.reload();
      }
    } );

    $event.preventDefault();
  }
}

如果我的 data 数组中的任何对象缺少 id,我会尝试限制刷新。在这种情况下,我会显示一个 Angular 材质对话框,要求确认。上面的代码工作得很好,唯一的问题是,当我刷新页面时,会弹出一个确认窗口,要求确认重新加载,然后显示我的 Angular 材质对话框。我不希望显示确认窗口,因为我已经使用 Angular 对话框处理了页面刷新。

问题 - 有没有办法完全阻止页面刷新或在弹出确认窗口时以编程方式单击“取消”按钮?

angular angular-material onbeforeunload
1个回答
0
投票

出于安全原因,不可能完全阻止页面刷新。

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