Par défaut, lorsque le esc est enfoncé, la boîte de dialogue se ferme. Cependant, je ne veux pas ce comportement voulu.
Ce que j'aimerais, c'est empêcher la fermeture lorsque le esc bouton est enfoncé mais permet toujours un clic sur le fond pour fermer la boîte de dialogue. Comment cela peut-il être fait?
J'ai essayé quelque chose comme ça. Cependant, cela ne fonctionne pas:
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');
});
}
Vous pouvez utiliser l'option disableClose
de MatDialogConfig
. Passez-le comme deuxième paramètre de MatDialog#open
:
openDialog() {
this.dialog.open(MyDialogComponent, { disableClose: true });
// ...
}
Cela devrait empêcher esc de fermer la boîte de dialogue.
EDIT: J'ai réussi à résoudre ce que vous avez demandé en adaptant la réponse de Marc (en tant que commentaire sur ma réponse), ainsi qu'en utilisant MatDialogRef#backdropClick
pour écouter les événements de clic sur le fond.
Initialement, le dialogue aura disableClose
défini comme true
. Cela garantit que la pression de la touche esc
, ainsi que le fait de cliquer sur le fond ne provoquera pas la fermeture de la boîte de dialogue.
Ensuite, vous vous abonnez à MatDialogRef#backdropClick
méthode (qui émet lorsque la toile de fond est cliquée et retourne comme MouseEvent
).
Quoi qu'il en soit, assez de discussions techniques. Voici le code:
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();
})
// ...
}
Démo Stackblitz (cliquez sur "Ouvrir la quatrième boîte de dialogue" pour le tester!)