9

Ich öffne ein modales Fenster mit $ uibModal.open von einem anderen Controller, und muss benachrichtigt werden, wenn das modale Fenster vollständig geschlossen wurde (und nicht während des Schließens. ..) so kann ich eine Funktion ausführen.

Der Code, der modale öffnet wie folgt:

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

ich einige vorgeschlagenen Lösungen sahen zu verwenden:

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

Das Problem, dass die Callback-Funktion wird vor dem eigentlichen Schließung genannt des modalen Fensters (wenn das modale Fenster noch offen ist) und dies ist nicht das Verhalten, das ich will, weil es bedeutet, dass es das "Schließen" -Ereignis und nicht das "Geschlossen" -Ereignis des Modals abfängt.

Gibt es eine einfache und einfache Möglichkeit, dies zu implementieren? Ich wäre überrascht, wenn nicht, da dieses Verhalten in allen UI-Frameworks auf dem Planeten sehr häufig ist ...

Bitte helfen Sie!

Antwort

22

Versuchen Sie dies.

.open Methode gibt ein Versprechen, das mit .closed verkettet sein könnte, die eine der vielen Eigenschaften von .open Methode ist.

Ich habe es getestet und es zeigt die Warnung erst, nachdem das Modal geschlossen wurde und nicht während es 'schließt'.

Siehe die ‚geschlossene‘ unter Return Abschnitt 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'); 
}); 

Hier ist die Plunker http://plnkr.co/edit/yB3k8e3R3ZLQFQ6sfLYW?p=preview

+2

ich Ihre Lösung versucht, aber es funktioniert nicht - ich bin immer eine Ausnahme „Kann nicht erhalten Eigenschaft 'dann' von undefinierter oder Null-Referenz ". es scheint, als wäre die Eigenschaft "geschlossen" irgendwie undefiniert für das Versprechen der offenen Methode ... –

+2

Nein. Entfernen Sie das modalInstance.result.then ... aus Ihrem Code. – Srijith

+0

Damit dies funktioniert, müssen wir das Popup schließen mit $ uibModalInstance.close ('cancel'); aber nicht mit ablehnen funktion. –

Verwandte Themen