防止在外部单击时关闭 MatDialog 并进行未决更改
Prevent MatDialog From Closing When Clicked Outside with pending changes
我想在有未决更改时防止在外部关闭。
我喜欢这样,但没有结果。
this.dialogRef.beforeClosed().subscribe(() => {
this.dialogRef.close(false);
//some code logic
//...
});
MatDialog 上的 disableClose
必须保留 false
最初,在打开对话框时,您可以将 'disableClose' 设置为 true,然后在点击背景时手动关闭对话框,或者如果没有未决更改则退出点击。
this.dialog.open(DialogComponent, { disableClose: true });
dialogRef.backdropClick().subscribe( () => {
if(!pendingChanges) dialogRef.close();
// else do nothing
});
根据情况,您可以最初将 disableClose
设置为 false
,以便用户可以在没有未决更改的情况下关闭它,具体取决于未决更改是什么,如果是例如异步调用,您可以将 disableClose
设置为 true
.
然后您还可以将 MatDialogRef
注入组件本身并根据您的要求手动切换 disableClose
,像这样:
constructor(private matDialogRef: MatDialogRef<WhateverYourDialogIsCalled>) {}
然后在异步调用中它可能是:
onSubmit() {
this.matDialogRef.disableClose = true;
this.myService.doSomething().subscribe(_ => {
this.matDialogRef.disableClose = false;
});
}
我想在有未决更改时防止在外部关闭。 我喜欢这样,但没有结果。
this.dialogRef.beforeClosed().subscribe(() => {
this.dialogRef.close(false);
//some code logic
//...
});
MatDialog 上的 disableClose
必须保留 false
最初,在打开对话框时,您可以将 'disableClose' 设置为 true,然后在点击背景时手动关闭对话框,或者如果没有未决更改则退出点击。
this.dialog.open(DialogComponent, { disableClose: true });
dialogRef.backdropClick().subscribe( () => {
if(!pendingChanges) dialogRef.close();
// else do nothing
});
根据情况,您可以最初将 disableClose
设置为 false
,以便用户可以在没有未决更改的情况下关闭它,具体取决于未决更改是什么,如果是例如异步调用,您可以将 disableClose
设置为 true
.
然后您还可以将 MatDialogRef
注入组件本身并根据您的要求手动切换 disableClose
,像这样:
constructor(private matDialogRef: MatDialogRef<WhateverYourDialogIsCalled>) {}
然后在异步调用中它可能是:
onSubmit() {
this.matDialogRef.disableClose = true;
this.myService.doSomething().subscribe(_ => {
this.matDialogRef.disableClose = false;
});
}