AngularJS verschachtelte modale Dialoge
Ich bin der Portierung einer großen CRUD-business-Anwendung, die erstellt wurde mit Oracle-forms-Technologie, um das web (HTML5 /AngularJS /RESTful-web-services).
Teil der Art und Weise, die business-Logik eingestellt ist, hängt von der Verfügbarkeit der modale Dialogfelder, die zeigen, CRUD-Netze. Für den Anfang, der Nutzer...
- klicken Sie auf eine Zeile des Rasters
- geben Sie Daten in die Zeile das erste Feld
- drücken Sie die EINGABETASTE
- cursor an das nächste Feld auf der rechten
- etc.
- Sie Bearbeiten Sie die anderen Felder, und so weiter
- Sie klicken Sie auf "speichern" irgendwo auf der Seite
- Validierungen passieren, web-service aufgerufen wird -> DATEN GESPEICHERT werden.
Habe ich gebaut, der Teil, über AngularUI s ng-grid.
Der nächste Schritt ist, wo ich gestolpert:
- Doppelklick auf eine grid-Zeile, ein neuer MODALER dialog kommt, mit einem "detail-grid".
- Sie Bearbeiten/löschen/etc. was auch immer aus dem Netz, und Sie können auch doppelklicken Sie erneut auf eine grid-Zeile, und wieder ein neuer MODALER dialog kommt, mit einem "detail-detail-grid". Und so weiter.
Als ich versuchte, dies über Angular-UI-s $dialog-service, habe ich schnell kennengelernt Wände - es gibt viele Probleme mit verschachtelten $Dialogfeld (z.B. sehen, dass dieses Problem auf der GitHub-repos), und, was weit beunruhigender ist, ist, dass Sie vor kurzem (vor 2 Monaten) beschlossen, einfach darauf verzichten, den alten dialog, denn es hatte viel zu viele Probleme, und neu zu schreiben.
Meine Frage an alle Kolleginnen und Winkel-devs gibt, ist, wie gehst du mit verschachtelten modale Dialoge? Sind Sie mit anderen libs - z.B. jQueryUI dialog? Wenn ja, wie verwenden Sie Sie "in einem Winkelbereich Weg"? also ohne zu mischen, DOM Verarbeitung im Controller? Ich habe versucht, zu Folgen Sie dem Beispiel der anderen Frage und in der Tat es funktioniert, aber es bettet das Dialogfeld HTML-Seite ist teilweise - das ist nicht gut (z.B. sich vorstellen, einbetten alle der HTML-code für deine Hilfe-dialog angezeigt, über die Taste F1 ("show keyboard-shortcuts-dialog") in all Ihre Winkel-HTML-template-partials!
Ich überlege laden-dialog-Vorlagen (wie Angular-UI-dialog besitzt) über $http und injizieren Sie den Inhalt über ngInclude, aber das würde bedeuten, ich müßte ein Platzhalter in meine DOM für Sie ('#dialogPlace' oder sowas) - und da habe ich eine potentiell unbegrenzte "Depth" der Schachtelung zu behandeln, ich fürchte, ich muss code "Stapel-handling" auf meinem eigenen, das hinzufügen von DOM-Elementen alle Weg. Gott weiß, was das verursachen wird, in sich selbst...
Ich mag Eckig, aber mein problem domain erfordert eine solide Komponente für verschachtelte modalen Dialogen. Ich hoffe, jemand hat draußen vor dem problem und hat eine saubere, Eckige wie die Lösung...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da gab es keine Möglichkeit, dies zu lösen, mit der "unter-Rekonstruktion" AngularUI die dialog-service, die ich verwendet, jQueryUI dialog (die hat keine Probleme mit modals laichen modals laichen modals...), und erstellt eine Art "mini-framework" von meiner eigenen. Ich Basis eine Menge von dem, was ich Tat, auf die Quellen der AngularUI dialog, und es scheint gut zu funktionieren.
Dies ist der Angular service, den ich codiert (Typoskript-code, so dass es einige geben specs - aber Reine Javascript sonst). Da es spawnt, modale Dialoge, ich rief den service "Plato" 🙂
...und verwenden Sie es wie diese:
Erste, der aufrufende code, der zeigen will, der dialog:
mit der HTML-teilweise Vorlage mit eckigen Controllern und-Richtlinien wie gewohnt:
und die modalen dialog-controller mit Handler wie diese:
Ich im Grunde pass showDialog:
Design ist ein kompletter hack, um es milde auszudrücken, aber es funktioniert: ich benutze den Anrufer Umfang zu speichern dialogOptions, und im inneren dialog-controller verwende ich $scope.$Eltern.dialogOptions, Lesen eingehende Zeug, von dem Anrufer, und speichern Sie alle Ergebnisse, die die callback-Lesen ("dialogOptions" als eine Brücke zwischen den beiden scopes).
Mindestens 2013/Juli, es ist der einzige Winkel-y Weg, die ich gefunden/gehackt zum erstellen eines modalen Dialogfeld, das können hervorgebracht werden, die in einer verschachtelten Art und Weise (z.B. die controllerMunicipalitiesLOV controller Aufruf von showDialog in der Reihe, und ein anderer controller ruft es wieder, etc).
Ich wünschte, ich wüsste einen Weg, um pass "dialogOptions" als zusätzlichen parameter auf die modalen Dialogfeld controller - leider bin ich nicht versiert in den Winkel-Innenseiten ; alle Hilfe-das meiste willkommen, (es machen würde, diese Schnittstelle viel sauberer).
Hoffe, das jemand hilft.
Verwendeten wir http://angular-ui.github.io/bootstrap/#/modal für unsere modals.
Wir hatten im Grunde genommen das gleiche Problem ist hier aufgelistet. Großes Netz mit verbindlichen Daten, Schaltfläche Bearbeiten, um modale, löschen, speichern etc.
Würden Sie nur eine modal-div versteckt auf der Seite, dann pass in die grid-Zeilen-Modell auf klicken (das war ein Schmerz).
z.B.
War es seltsam an Feld übergeben von Objekten durch alle ng-klicken Sie auf/controller-Methoden nur die bekommen, die modal arbeiten, aber es klappte am Ende und war TROCKEN.
Nicht sicher, ob dies hilfreich ist.
kämpfen für das gleiche problem habe ich geputtet togethere verschiedene Teile, Gebäude sgDialogService. Es ist ein kleines Modul service, der es erlaubt mehrere verschachtelte Dialoge/Warnungen/bestätigen Sie mit einer syntax ähnlich wie die standard-Winkel-dialog:
War die Idee
So bald wie möglich werde ich eine version auf github...müssen nur fügen Sie die unit-tests
Bearbeiten 1
Setup-repository auf github: sgDialogService