Bunu yapmanın iki yolu var.
İletişim kutusunu açan yöntemde, aşağıdaki yapılandırma seçeneğini disableClose
ikinci 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#backdropClick
ve tıklama olaylarını arka plana dinledim.
Başlangıçta, iletişim kutusunun yapılandırma seçeneği olarak disableClose
ayarlanmış olacaktır true
. Bu, esc
tuşa basmanın yanı sıra arka plana tıklamanın iletişim kutusunun kapanmasına neden olmamasını sağlar.
Daha sonra, MatDialogRef#backdropClick
yö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(); }