Bunu yapmanın iki yolu var.
İletişim kutusunu açan yöntemde, aşağıdaki yapılandırma seçeneğini disableCloseikinci parametre olarak girin MatDialog#open()ve şu şekilde ayarlayın true:
export class AppComponent {
constructor(private dialog: MatDialog){}
openDialog() {
this.dialog.open(DialogComponent, { disableClose: true });
}
}
Alternatif olarak, bunu iletişim bileşeninin kendisinde yapın.
export class DialogComponent {
constructor(private dialogRef: MatDialogRef<DialogComponent>){
dialogRef.disableClose = true;
}
}
İşte aradığınız şey:

Ve işte bir Stackblitz demosu
Diğer kullanım durumları
İşte bunların nasıl uygulanacağına dair bazı diğer kullanım durumları ve kod parçacıkları.
escİletişim kutusunun kapatılmasına izin ver , ancak iletişim kutusunu kapatmak için arka plana tıklamaya izin verme
@MarcBrazeau'nun cevabımın altındaki yorumda söylediği gibi, anahtarın modu kapatmasına izin verebilir, escancak yine de modal dışına tıklamaya izin vermeyebilirsiniz . Bu kodu iletişim bileşeninizde kullanın:
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();
}
}
escDiyaloğu kapatmayı engelle , ancak arka plana tıklamaya izin ver
PS Bu kökenli bir cevaptır bu cevap demo Bu yanıta göre edildi.
escAnahtarın iletişim kutusunu kapatmasını önlemek, ancak arka plana tıklamaya izin vermek için, Marc'ın cevabını uyarladım MatDialogRef#backdropClickve tıklama olaylarını arka plana dinledim.
Başlangıçta, iletişim kutusunun yapılandırma seçeneği olarak disableCloseayarlanmış olacaktır true. Bu, esctuşa basmanın yanı sıra arka plana tıklamanın iletişim kutusunun kapanmasına neden olmamasını sağlar.
Daha sonra, MatDialogRef#backdropClickyönteme abone olun (fon tıklandığında ortaya çıkar ve a olarak geri döner MouseEvent).
Her neyse, yeterince teknik konuşma. İşte kod:
openDialog() {
let dialogRef = this.dialog.open(DialogComponent, { disableClose: true });
dialogRef.backdropClick().subscribe(() => {
dialogRef.close();
})
}
Alternatif olarak, bu, iletişim kutusu bileşeninde yapılabilir:
export class DialogComponent {
constructor(private dialogRef: MatDialogRef<DialogComponent>) {
dialogRef.disableClose = true;
dialogRef.backdropClick().subscribe(() => {
dialogRef.close();
})
}
}
@HostListener('window:keyup.esc') onKeyUp() { this.dialogRef.close(); }