Вы можете использовать опцию disableClose
MatDialogConfig
.Передайте его как второй параметр MatDialog#open
:
openDialog() {
this.dialog.open(MyDialogComponent, { disableClose: true });
// ...
}
Это должно помешать esc закрыть диалоговое окно.
РЕДАКТИРОВАТЬ: Мне удалось решить то, что вы просили, адаптировав ответ Марка (в качестве комментария к моему ответу), а также используя MatDialogRef#backdropClick
для прослушивания событий щелчка на заднем плане.
Первоначально диалогdisableClose
будет установлен как true
.Это гарантирует, что нажатие клавиши esc
, а также нажатие на фон не приведут к закрытию диалога.
После этого, подписавшись на метод MatDialogRef#backdropClick
(который генерируется, когда фон нажимается и возвращается какa 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();
})
// ...
}
Демонстрация Stackblitz (нажмите «Открыть четвертое диалоговое окно», чтобы проверить это!)