我正在嘗試使用 Material 對話框將我的瀏覽器警報替換為自定義警報。如果用戶嘗試離開未保存更改的表單,則會顯示自定義警報。但我需要等待(暫停函式),直到用戶單擊選項以回傳值。
discardChangesAlertResult: boolean;
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.hasBeenEdited) {
const dialogRef = this.dialog.open(DiscardChangesComponent, {panelClass: 'alert'});
dialogRef.afterClosed().subscribe(result => {
if (this.discardChangesService.discardChangesAlert) {
this.hasBeenEdited = false;
this.discardChangesAlertResult = true;
} else {
this.discardChangesAlertResult = false;
}
});
return this.discardChangesAlertResult; // I need this line to wait for user input
} else {
return true;
}
}
uj5u.com熱心網友回復:
你必須為此回傳 Observable。
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (!this.hasBeenEdited) {
return true;
}
return this.dialog
.open(DiscardChangesComponent, {panelClass: 'alert'})
.afterClosed()
.pipe(map(result => {
if (this.discardChangesService.discardChangesAlert) {
this.hasBeenEdited = false;
}
return !!this.discardChangesService.discardChangesAlert;
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471674.html
