Angular UI Bootstrap-Modul Nicht Schließen auf die Schaltfläche Zurück
Ich bin mit einem Modul aus dem UI-Boostrap-Erweiterungen (http://angular-ui.github.io/bootstrap). Das Modul dient eigentlich als laden-dialog wird automatisch geschlossen, wenn ein set von web service die Daten wieder auf meiner Winkel-code. Wie die Daten auf dieser Seite automatisch geladen und der dialog kommt sofort.
All dies funktioniert hervorragend, wenn ich auf die Seite in Frage, für die das erste mal oder einfach nur aktualisieren. Das problem tritt auf, wenn ich gehen zu einem tieferen Seite und dann versuchen, und navigieren Sie zurück zu der ursprünglichen Seite (mit dialog) über die browser-Schaltfläche " zurück. Der dialog geht nie Weg, trotz der Tatsache, dass alle Daten zurückgegeben und das Modul schließen () - Aufruf gemacht wurde.
Hab ich verfolgte diese nach unten, um das Versprechen zu öffnen-dialog angezeigt werden, passiert nach dem schließen nennen, aber auch nur, wenn die Seite geladen wird über den back-button. Die entlassen rufen Sie schließt nie etwas, denn es wurde nicht Hinzugefügt (ich habe bestätigt das in den debugger).
Die Frage, die ich habe, ist, wie könnte ich das umgehen? Gibt es eine solide Art und Weise zu fangen die Fertigstellung der Seite laden über Winkel und überprüfen Sie, dass das Dialogfeld geschlossen wird? Gibt es eine bessere Art und Weise über die Benutzeroberfläche von Bootstrap api?
Ich weiß, das ist eher ungewöhnlich, aber irgendwelche Gedanken auf, es wäre toll.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
@HankScorpio die Lösung ist gut, aber ich glaube, es gibt eine vereinfachte option jetzt.
Gibt es keine Notwendigkeit zum speichern der aktuellen mehr modal, wenn Sie sich entweder ein
$locationChangeStart
oder$routeChangeStart
Zuhörer mit$uibModalStack
injiziert und rufen$uibModalStack.dismissAll()
.$locationChangeStart
hat den Vorteil der Zusammenarbeit für beide ngRoute und uiRoute.d.h. Wenn nur für die eine Seite, die sich dann in Ihrem controller, den Sie haben würde:
Wenn Sie möchten, tun Sie dies für alle Seiten, dann definieren Sie diese in einer Fabrik, die wird immer geladen oder einfach nur eine app.führen Sie code-segment:
$uibModalStack.getTop()
gibt alles, und nur in diesem Fall entlassen und auchevent.preventDefault()
(event
übergebenhandleLocationChange()
).Schließen modal popup auf die Schaltfläche zurück klicken Sie in angularjs
hoffen, dadurch sparen Sie sich viel Zeit für die Menschen, die Köpfe
Habe ich dieses gleiche problem. Hier ist, wie ich es behoben.
1) Erstellen Sie einen Dienst für die Abstraktion der öffnung und Schließung der ein -, modal-und die Spur, die eine offen ist (notwendig für Schritt 2). Anstelle von aufrufen
$modal.open()
direkt, callModalService.open()
.Hier gehen Sie, Sie haben können, die ich schrieb:
2) In eine Steuerung, einen Ereignis-listener hinzufügen
$routeChangeStart
dieses Ereignis wird ausgelöst, wenn jemand trifft die zurück-Taste.3) Ihre modals sollte sich nun schließen, wenn ein user schlägt zurück.
4) Genießen.
VERBESSERUNG:
Fand ich die Antwort von HankScorpio die beste die es gibt. Ich wollte dieses snippet für diejenigen, die sich mit ui-router und Ihre Empfehlung für stateful modals.
1) ich wollte die Folge.schließlich(...) zu springen, um einen übergeordneten Zustand;
2) wollte ich zur Kontrolle der Schließung des modal von $stateProvider config, NICHT durch die Takelage ein controller und das hinzufügen eines Listeners zu $routeChangeStart
Hier ist ein Beispiel für einen Staat, der öffnet (und schließt) es ist modal:
Machte ich ModalService bewusst, $Status, so dass das Ergebnis dem schließen eines modalen springen könnte, um eine übergeordnete Sicht:
ein. Hinzufügen eines isStateful Flagge zu modalService.open(...):
so, dass clearModal zurück zum vorherigen Zustand:
Schließlich, fügen Sie die closeModal () - Funktion oben (und nicht ein "stateful" zu schließen, einfach eine Kündigung):
Die Vorteile sind, dass der zurück-button-Funktionalität gesteuert wird im Zustand config-Ebene, nicht durch einen listener.