9

Sto aprendo una finestra modale utilizzando $ uibModal.open da un altro controller e devo essere avvisato quando la finestra modale è stata chiusa completamente (e non durante la chiusura). ..) quindi sarò in grado di eseguire una funzione.

Il codice che apre la modale è come segue:

var modalInstance = $uibModal.open({ 
    templateUrl: "myModalContent.html", 
    controller: "termModalCtrl", 
    windowClass: 'app-modal-window', 
    resolve: { 
    'params': function() { return id } 
    } 
}); 

Ho visto alcune soluzioni proposte da usare:

modalInstance.result.then(function(result) { 
}); 

Il problema è che la funzione di callback viene chiamata prima della chiusura effettiva della finestra modale (quando la finestra modale è ancora aperta) e questo non è il comportamento che voglio perché significa che cattura l'evento "chiusura" e non l'evento "chiuso" del modale.

C'è un modo pulito e semplice per implementare questo? Sarei sorpreso se non dal momento che questo comportamento è molto comune in qualsiasi framework UI sul pianeta ...

Please help!

risposta

22

Prova questo.

.open metodo restituisce una promessa che potrebbe essere incatenata con .closed che è una delle molte proprietà del metodo .open.

L'ho provato e mostra l'avviso solo dopo che la modale si è chiusa e non mentre sta 'chiudendo'.

consultare la 'chiuso' sotto ritorno sezione here

var modalInstance = $uibModal.open({ 
    templateUrl: "myModalContent.html", 
    controller: "termModalCtrl", 
    windowClass: 'app-modal-window', 
    resolve: { 
     'params': function() { return id } 
    } 
}).closed.then(function(){ 
    window.alert('Modal closed'); 
}); 

Ecco l'plunker http://plnkr.co/edit/yB3k8e3R3ZLQFQ6sfLYW?p=preview

+2

ho provato la soluzione, ma non funziona - sto ottenendo un'eccezione "Impossibile ottenere la proprietà 'then' di riferimento non definito o nullo ". sembra che la proprietà 'chiusa' sia in qualche modo indefinita per la promessa restituita dal metodo aperto ... –

+2

No. Rimuovi modalInstance.result.then ... dal tuo codice. – Srijith

+0

Per farlo funzionare, dobbiamo chiudere il popup usando $ uibModalInstance.close ('cancel'); ma NON usare la funzione di licenziamento. –