¿Cuál es la diferencia entre "descartar" un modal y "cerrar" un modal en Angular UI-Bootstrap?

81

¿Cuál es la diferencia entre "descartar" un modal y "cerrar" un modal?

close(result) - a method that can be used to close a modal, passing a result
dismiss(reason) - a method that can be used to dismiss a modal, passing a reason
Verde
fuente

Respuestas:

89

La respuesta está en la documentación, justo después de las dos líneas que citó:

El método abierto devuelve una instancia modal, un objeto con las siguientes propiedades:

  • close (resultado): un método que se puede usar para cerrar un modal, pasando un resultado
  • despedir (motivo): un método que se puede utilizar para descartar un modal, pasando un motivo
  • resultado: una promesa que se resuelve cuando se cierra un modal y se rechaza cuando se descarta un modal

Lo importante aquí es lo que sucede con la promesa. Al cierre, la promesa se resuelve, esencialmente, la devolución de llamada de "éxito" se activa. Al descartar, la promesa se rechaza y, por lo tanto, se ejecuta la devolución de llamada de "falla".

JB Nizet
fuente
33
Lo importante aquí es lo que sucede con la promesa. Al cierre, la promesa se resuelve, esencialmente, la devolución de llamada de "éxito" se activa. Al descartar, la promesa se rechaza y, por lo tanto, se ejecuta la devolución de llamada de "falla".
Brian
Tengo una pregunta adicional aquí: desde la perspectiva de la interfaz de usuario, ¿qué significa descartar el cuadro de diálogo? Según tengo entendido, el usuario puede cerrar el cuadro de diálogo con "Aceptar" o con "Cancelar" (también con "x" en la ventana). ¿Cómo se puede descartar de la interfaz de usuario? Gracias de antemano
lm.
1
Significa lo que tú quieres que signifique. La plantilla del cuadro de diálogo depende de usted. Podrías tener 4 botones en la plantilla, dos descartándolos cada uno con su propia razón y dos cerrándolos cada uno con su propio resultado. Mire la demostración en angular-ui.github.io/bootstrap : el botón Aceptar llama a ok (), que a su vez cierra el cuadro de diálogo con un elemento seleccionado como resultado, y el botón cancelar llama a cancelar (), que cierra el cuadro de diálogo con 'cancelar' como una razón.
JB Nizet
1
Thx, pero tengo otra pregunta al respecto: ¿cuál es el significado real de despedir? ¿Es como cerrar sin una promesa? Y la razón, ¿cuál es su propósito principal? ¿Cuál es la diferencia entre descartar con 'foo' o con 'bar'? No sé cómo usar este parámetro ... Si alguien puede explicarlo ...
M'sieur Toph '
@ M'sieurToph 'La razón pasada depende completamente de usted. Podrías imaginar tener dos botones "No, nunca" y "Quizás más tarde" que cierren el modal, pero con una razón diferente, provocando un resultado diferente.
JB Nizet
2

Descubrí que es mejor descartar un modal si es de un usuario que cierra el modal (por ejemplo, regresa al estado detrás del modal e invoca state.go ('^')), y se usa el cierre del modal al cambiar de estado a través de $ state.go o ui-sref.

De esa manera, puede usar la resultpromesa para hacer diferentes cosas, dependiendo de lo que suceda.

result.then(function() { /* state change via ui-sref */ })

result.catch(function() { /* user closed modal */ })

AnthW
fuente
1
Esto es importante porque cuando se descarta un modal, la promesa no se resuelve, lo que significa que obtendrá un error de consola a menos que detecte el error. No soy un gran admirador, ya que descartar se usa a menudo para cancelar, lo cual no es un problema real. La implementación de una captura evita que se lance el error.
Jared Sol
Esta respuesta asume que el usuario está usando la biblioteca de terceros ui-router, lo cual no siempre es el caso (ni la pregunta lo incluye).
runderworld