Ada dua cara untuk melakukannya.
Dalam metode yang membuka dialog, teruskan opsi konfigurasi berikut disableClose
sebagai parameter kedua MatDialog#open()
dan setel ke true
:
export class AppComponent {
constructor(private dialog: MatDialog){}
openDialog() {
this.dialog.open(DialogComponent, { disableClose: true });
}
}
Cara lainnya, lakukan di komponen dialog itu sendiri.
export class DialogComponent {
constructor(private dialogRef: MatDialogRef<DialogComponent>){
dialogRef.disableClose = true;
}
}
Inilah yang Anda cari:
Dan inilah demo Stackblitz
Kasus penggunaan lainnya
Berikut beberapa kasus penggunaan dan cuplikan kode lain tentang cara menerapkannya.
Izinkan escuntuk menutup dialog tetapi jangan izinkan mengklik latar belakang untuk menutup dialog
Seperti yang dikatakan @MarcBrazeau dalam komentar di bawah jawaban saya, Anda dapat mengizinkan esckunci untuk menutup modal tetapi tetap melarang mengklik di luar modal. Gunakan kode ini pada komponen dialog Anda:
import { Component, OnInit, HostListener } from '@angular/core';
import { MatDialogRef } from '@angular/material';
@Component({
selector: 'app-third-dialog',
templateUrl: './third-dialog.component.html'
})
export class ThirdDialogComponent {
constructor(private dialogRef: MatDialogRef<ThirdDialogComponent>) {
}
@HostListener('window:keyup.esc') onKeyUp() {
this.dialogRef.close();
}
}
Cegah escdari menutup dialog tapi izinkan klik pada backdrop untuk menutup
PS Ini adalah jawaban yang berasal dari jawaban ini , di mana demo didasarkan pada jawaban ini.
Untuk mencegah esckunci menutup dialog tetapi mengizinkan klik pada latar belakang untuk menutup, saya telah mengadaptasi jawaban Marc, serta menggunakan MatDialogRef#backdropClick
untuk mendengarkan peristiwa klik ke latar belakang.
Awalnya, dialog akan disableClose
menetapkan opsi konfigurasi sebagai true
. Ini memastikan bahwa esc
penekanan tombol, serta mengklik latar belakang tidak akan menyebabkan dialog ditutup.
Setelah itu, berlangganan ke MatDialogRef#backdropClick
metode (yang memancar saat latar belakang diklik dan kembali sebagai a MouseEvent
).
Bagaimanapun, pembicaraan teknis yang cukup. Berikut kodenya:
openDialog() {
let dialogRef = this.dialog.open(DialogComponent, { disableClose: true });
dialogRef.backdropClick().subscribe(() => {
dialogRef.close();
})
}
Alternatifnya, ini bisa dilakukan di komponen dialog:
export class DialogComponent {
constructor(private dialogRef: MatDialogRef<DialogComponent>) {
dialogRef.disableClose = true;
dialogRef.backdropClick().subscribe(() => {
dialogRef.close();
})
}
}
@HostListener('window:keyup.esc') onKeyUp() { this.dialogRef.close(); }