Событие beforeunload не поддерживает функцию обратного вызова, которая возвращает обещание, поэтому вы не можете показать всплывающее окно и возвращаемое значение, так как это не операция syn c.
что вы можете сделать вместо этого просто всегда возвращает false или вызывает
event.preventDefault()
, и если пользователь решил покинуть страницу, вы можете позвонить
window.close(....)
, если вы еще не отменили событие.
поэтому ваш код должен выглядеть примерно так
@HostListener('window:beforeunload', ['$event'])
beforeunloadHandler(event) {
this.openDocumentSaveDialog();
event.preventDefault();
event.returnValue = '';
return false;
}
public openDocumentSaveDialog(): void {
const documentSaveDialogRef =
this.documentSaveDialog.open(DocumentSaveDialogComponent, {
width: '600px',
height: '200px',
disableClose: true,
autoFocus: false,
data: null
});
documentSaveDialogRef.afterClosed().subscribe(result => {
if(!result)
window.close()
this.closeMenu.emit()
});
}