2013-12-11 20 views
16

Sto cercando un metodo per determinare in modo affidabile se la finestra modale angolare-interfaccia utente è attualmente aperta o chiusa.Determina in modo affidabile se il modale angolare-ui è aperto o chiuso (mostrato o nascosto)

Lo standard Bootstrap JS fornisce gli eventi "mostrato"/"nascosto" per questo.

In questo momento posso solo avvolgere la funzione modal.close() e impostare una variabile su "chiuso". Inoltre sto rimuovendo l'oggetto modale e riattivalo quando viene riaperto. Ma questo non copre i casi in cui l'utente fa clic sullo sfondo o preme il tasto ESC per chiudere la modal.

C'è un modo pulito per coprire anche questi casi?

+0

Qual è il tuo caso d'uso reale e funzionale? –

+0

Utilizzo un fork del servizio di sicurezza utilizzato nella tua angular-app: https://github.com/angular-app/angular-app/blob/master/client/src/common/security/security.js – chmanie

risposta

23

TLDR: Includere modulo ui.bootstrap.modal nella vostra app, iniettare fabbrica $modalStack nel controller/servizi/qualunque cosa e poi !!$modalStack.getTop() è sufficiente per sapere se esiste un modale su no.

soluzione dettagliata: stavo affrontando lo stesso problema e mi si avvicinò con il seguente lavoro intorno:

C'è una fabbrica chiamato $modalStack che è definito in ui-bootstrap lib che gestisce le modali. Lo stesso servizio ha anche un metodo chiamato getTop() che restituisce il più modale in dom. (E un metodo dismissAll() per chiudere tutte le modali). Così ho scritto un piccolo modulo con alcune piccole funzioni.

var utilsModule = angular.module('utilsModule', ['ui.bootstrap.modal']); 

utilsModule.factory('modalUtils', [ 
    '$modalStack', 
    function ($modalStack) { 
    return { 
     modalsExist: function() { 
     return !!$modalStack.getTop(); 
     }, 
     closeAllModals: function() { 
     $modalStack.dismissAll(); 
     } 
    }; 
    } 
]); 
+2

typo in '$ modalStack.dismisAll();'. Dovrebbe essere '$ modalStack.dismissAll();' – Dmitry

+0

Questa soluzione funziona alla grande. – jlyonsmith

+0

È facile da usare ... –

Problemi correlati