デフォルトでは、 esc ボタンを押すと、ダイアログが閉じます。しかし、私はこの意図された動作を望まない。
私が起こりたいのは、 esc ボタンが押されても、背景をクリックしてダイアログを閉じることができます。これはどのように行うことができますか?
私はこのようなものを試しました。ただし、機能しません。
openEditDialog() {
const dialogRef = this.dialog.open(EditPlaceDialogComponent, {
width: '90%',
height: '720px'
});
dialogRef.keydownEvents().subscribe(e => {
if (e.keyCode === 27) {
e.preventDefault();
dialogRef.disableClose = false;
}
});
dialogRef.afterClosed().subscribe(result => {
console.log('The dialog was closed');
});
}
disableClose
のMatDialogConfig
オプションを使用できます。 MatDialog#open
の2番目のパラメーターとして渡します。
openDialog() {
this.dialog.open(MyDialogComponent, { disableClose: true });
// ...
}
これは防ぐ必要があります esc ダイアログを閉じることから。
編集:マークの回答を(私の回答へのコメントとして)変更し、MatDialogRef#backdropClick
背景のクリックイベントをリッスンします。
最初に、ダイアログにはdisableClose
がtrue
として設定されます。これにより、esc
キーを押すだけでなく、背景をクリックしてもダイアログが閉じなくなります。
その後、MatDialogRef#backdropClick
メソッドにサブスクライブします(これは、背景がクリックされたときに発生し、MouseEvent
として返されます)。
とにかく、十分な技術的な話。これがコードです:
openDialog() {
let dialogRef = this.dialog.open(EditPlaceDialogComponent, { disableClose: true /* Your other config options here */ });
/*
Subscribe to events emitted when the backdrop is clicked
NOTE: Since we won't actually be using the `MouseEvent` event, we'll just use an underscore here
See https://stackoverflow.com/a/41086381 for more info
*/
dialogRef.backdropClick().subscribe(_ => {
// Close the dialog
dialogRef.close();
})
// ...
}