Quiero evitar que se cierre en el exterior cuando hay cambios pendientes. Yo algo como esto, pero sin resultado.
this.dialogRef.beforeClosed().subscribe(() => { this.dialogRef.close(false); //some code logic //... }); El disableClose en MatDialog tiene que permanecer false
Inicialmente, al abrir el cuadro de diálogo, puede pasar 'disableClose' como verdadero y luego cerrar manualmente el cuadro de diálogo al hacer clic en el fondo o hacer clic en Escape si no hay cambios pendientes.
this.dialog.open(DialogComponent, { disableClose: true }); dialogRef.backdropClick().subscribe( () => { if(!pendingChanges) dialogRef.close(); // else do nothing });Dependiendo del caso, puede configurar inicialmente disableClose como false , para que el usuario pueda cerrarlo si no hay cambios pendientes, dependiendo de cuál sea ese cambio pendiente, si es una llamada asíncrona, por ejemplo, puede configurar disableClose como true .
También puede inyectar MatDialogRef en el componente mismo y alternar manualmente disableClose según sus requisitos, así que algo como esto:
constructor(private matDialogRef: MatDialogRef<WhateverYourDialogIsCalled>) {}entonces en una llamada asíncrona podría ser:
onSubmit() { this.matDialogRef.disableClose = true; this.myService.doSomething().subscribe(_ => { this.matDialogRef.disableClose = false; }); }