2017-01-09 2 views
1

Ich bin auf der Suche nach einer Möglichkeit, die Auflösung eines Angular-UI Bootstrap-Modals aufzuheben und das Öffnen zu verhindern. Die Methode dismitAll funktioniert nicht, da die modale Instanz erst nach Abschluss der Auflösungsoperation zum modalen Stack hinzugefügt wird.Wie Modal zu schließen/zu entlassen, während immer noch auflösen?

Ich habe eine Website, wo Modals öffnen und schließen auf Route ändern. Wenn dismitAll während der Änderung der Route aufgerufen wird, um alle alten Modale zu schließen, hat dies keine Auswirkungen auf die Modale, die noch aufgelöst werden. Sie kommen also auf die neue Route, aber das alte Modal erscheint immer noch, nachdem seine Entschlossenheit abgeschlossen ist.

Antwort

0

Wie die Dinge jetzt stehen, gibt es keine Möglichkeit, ES6 und $ q Versprechen zu stornieren. Sie können sich auf this question für weitere Informationen beziehen.

tl; dr Bluebird allows promise cancellation

Wenn Sie es wirklich brauchen können Sie add bluebird to angular.

Wenn Sie noch plain ol‘$ q verwenden möchten, hier ist was ich getan habe

  1. Übergeben Sie die modale den aktuellen Zustand (wenn ui-router verwenden) oder Route (bei Verwendung von angular router).
  2. Wenn Sie die modale Vorlage rendern müssen, vergleichen Sie den aktuellen Status mit dem bereitgestellten Status.
  3. Wenn sie das modale

Das modalInstance Objekt stellt ein rendered Versprechen nicht gleich verwerfen sind, die ausgeführt werden, wenn der modale fertige Rendering, Sie $uibModalStack.dismissAll(); innen platzieren können.

Beispiel:

modalInstance.rendered.then(function (currentState) { 
    if (currentState !== $state.current) { 
     $uibModalStack.dismissAll(); 
    } 
}, function() { 
    $log.info('Modal dismissed at: ' + new Date()); 
}); 

Natürlich können Sie Ihr Laden nach Rendern des modal und vermeiden dieses Chaos insgesamt verschieben können.

+0

Nach einigen weiteren Untersuchungen fand ich keine Möglichkeit, das Modal zu verwerfen, während es löst. Der frühestmögliche Moment liegt innerhalb des * geöffneten * Versprechens. Ich fügte anwendungsspezifischen Code hinzu, um zu prüfen, ob das Modal noch geöffnet werden sollte, und es andernfalls zu verwerfen. Danke für deine Antwort trotzdem :) – schneikai

Verwandte Themen