9

Otwieram okno modalne za pomocą $ uibModal.open z innego kontrolera, i muszę być powiadomiony, gdy okno modalne zostało całkowicie zamknięte (a nie podczas zamykania. ..), więc będę mógł uruchomić funkcję.

Kod, który otwiera modalna jest następujący:

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

Widziałem kilka sugerowanych rozwiązań do wykorzystania:

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

Problem polega na tym, że funkcja zwrotna jest wywoływana przed faktycznym zamknięciu okna modalnego (gdy okno modalne jest nadal otwarte) i nie jest to zachowanie, które chcę, ponieważ oznacza to, że przechwytuje zdarzenie "zamknięcie", a nie "zamknięte" zdarzenie modalu.

Czy istnieje prosty i prosty sposób na wdrożenie tego? Byłbym zaskoczony, gdyby nie, ponieważ takie zachowanie jest bardzo powszechne w jakichkolwiek strukturach interfejsu użytkownika na świecie ...

Proszę o pomoc!

Odpowiedz

22

Spróbuj tego.

.open Metoda zwraca obietnicę, która może być powiązana z .closed, która jest jedną z wielu właściwości metody .open.

Przetestowałem to i pokazuje alert tylko po zamknięciu modala, a nie podczas "zamykania".

Skierować „zamknięte” w Return sekcji 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'); 
}); 

Oto plunker http://plnkr.co/edit/yB3k8e3R3ZLQFQ6sfLYW?p=preview

+2

Próbowałem swoje rozwiązanie, ale to nie działa - Dostaję wyjątek „Nie można dostać właściwość "następnie" o niezdefiniowanej lub zerowej wartości odniesienia ". wydaje się, że właściwość "zamknięta" jest w jakiś sposób nieokreślona z powodu obietnicy zwróconej przez otwartą metodę ... –

+2

Nie. Usuń plik modalInstance.result.then ... ze swojego kodu. – Srijith

+0

Aby to działało, musimy zamknąć wyskakujące okienko przy pomocy $ uibModalInstance.close ('cancel'); ale NIE używa funkcji odrzucania. –