Saltar al contenido

Deshabilite hacer clic fuera del área de diálogo de material angular para cerrar el diálogo (con Angular versión 4.0+)

Deseamos mostrarte la mejor respuesta que hemos encontrado on line. Nosotros deseamos que te sea de mucha utilidad y si puedes comentarnos algún detalle que nos pueda ayudar a crecer hazlo libremente.

Solución:

Hay dos maneras de hacerlo.

  1. En el método que abre el cuadro de diálogo, pase la siguiente opción de configuración disableClose como el segundo parámetro en MatDialog#open() y configúralo en true:

    export class AppComponent 
      constructor(private dialog: MatDialog)
      openDialog() 
        this.dialog.open(DialogComponent,  disableClose: true );
      
    
    
  2. Alternativamente, hágalo en el propio componente de diálogo.

    export class DialogComponent 
      constructor(private dialogRef: MatDialogRef)
        dialogRef.disableClose = true;
      
    
    

Esto es lo que estás buscando:

<code>
<div class=

disableClose propiedad en material.angular.io” src=”https://i.stack.imgur.com/om5sF.jpg” />

Y aquí hay una demostración de Stackblitz


Otros casos de uso

Aquí hay algunos otros casos de uso y fragmentos de código de cómo implementarlos.

Permitir Esc para cerrar el cuadro de diálogo pero no permitir hacer clic en el fondo para cerrar el cuadro de diálogo

Como dijo @MarcBrazeau en el comentario debajo de mi respuesta, puede permitir que el Esc key para cerrar el modal pero aún no permitir hacer clic fuera del modal. Use este código en su componente de diálogo:

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)       

  @HostListener('window:keyup.esc') onKeyUp() 
    this.dialogRef.close();
  



Evitar Esc de cerrar el cuadro de diálogo pero permite hacer clic en el fondo para cerrar

PD Esta es una respuesta que se originó a partir de esta respuesta, donde la demostración se basó en esta respuesta.

Para prevenir el Esc key de cerrar el cuadro de diálogo pero permitir hacer clic en el fondo para cerrar, he adaptado la respuesta de Marc, además de usar MatDialogRef#backdropClick para escuchar los eventos de clic en el fondo.

Inicialmente, el cuadro de diálogo tendrá la opción de configuración disableClose establecer como true. Esto asegura que el esc presionar una tecla, así como hacer clic en el fondo no hará que el cuadro de diálogo se cierre.

Posteriormente, suscríbase a la MatDialogRef#backdropClick (que se emite cuando se hace clic en el fondo y regresa como un MouseEvent).

De todos modos, suficiente charla técnica. Aquí está el código:

openDialog() 
  let dialogRef = this.dialog.open(DialogComponent,  disableClose: true );
  /*
     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();
  )

  // ...

Alternativamente, esto se puede hacer en el componente de diálogo:

export class DialogComponent 
  constructor(private dialogRef: MatDialogRef) 
    dialogRef.disableClose = true;
    /*
      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();
    )
  

¿Qué tal jugar con estas dos propiedades?

deshabilitarCerrar: booleano: si el usuario puede usar escape o hacer clic en el fondo para cerrar el modal.

tiene fondo: booleano: indica si el diálogo tiene un fondo.

https://material.angular.io/components/dialog/api

valoraciones y reseñas

Recuerda que tienes el privilegio añadir una tasación justa si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *