Ich möchte Daten in einer Baumstruktur in einer Web-App anzeigen. Ich hatte gehofft, Angular für diese Aufgabe verwenden zu können.
Es sieht so aus, als würde ng-repeat es mir ermöglichen, eine Liste von Knoten zu durchlaufen, aber wie kann ich dann verschachteln, wenn die Tiefe eines bestimmten Knotens zunimmt?
Ich habe den folgenden Code ausprobiert , aber das automatische Escapezeichen des HTML- Codes verhindert , dass dies funktioniert. Außerdem befindet sich das end ul-Tag an der falschen Stelle.
Ich bin mir ziemlich sicher, dass ich dieses Problem völlig falsch angehe.
Irgendwelche Ideen?
Antworten:
Schauen Sie sich diese Geige an
Original: http://jsfiddle.net/brendanowen/uXbn6/8/
Aktualisiert: http://jsfiddle.net/animaxf/uXbn6/4779/
Dies sollte Ihnen eine gute Vorstellung davon geben, wie ein
tree like structure
Verwendungswinkel angezeigt wird . Es ist eine Art Rekursion in HTML!quelle
Wenn Sie Bootstrap CSS verwenden ...
Ich habe eine einfache wiederverwendbare Baumsteuerung (Direktive) für AngularJS basierend auf einer Bootstrap "nav" -Liste erstellt. Ich habe zusätzliche Einrückungen, Symbole und Animationen hinzugefügt. Für die Konfiguration werden HTML-Attribute verwendet.
Es wird keine Rekursion verwendet.
Ich nannte es Angular-Bootstrap-Nav-Tree (eingängiger Name, findest du nicht?)
Es ist ein Beispiel hier , und die Quelle ist hier .
quelle
Wenn Sie so etwas machen, ist die beste Lösung eine rekursive Direktive. Wenn Sie jedoch eine solche Anweisung erstellen, stellen Sie fest, dass AngularJS in eine Endlosschleife gerät.
Die Lösung hierfür besteht darin, dass die Direktive das Element während des Kompilierungsereignisses entfernt und es manuell kompiliert und zu den Verknüpfungsereignissen hinzufügt.
Ich habe dies in diesem Thread herausgefunden und diese Funktionalität in einen Dienst abstrahiert .
Mit diesem Dienst können Sie einfach eine Baumanweisung (oder andere rekursive Anweisungen) erstellen. Hier ist ein Beispiel für eine Baumanweisung:
In diesem Plunker finden Sie eine Demo. Diese Lösung gefällt mir am besten, weil:
Update: Unterstützung für benutzerdefinierte Verknüpfungsfunktionen hinzugefügt.
quelle
Angular-UI-Tree scheint einen guten Job für mich zu machen
quelle
Hier ist ein Beispiel mit einer rekursiven Direktive: http://jsfiddle.net/n8dPm/ Entnommen aus https://groups.google.com/forum/#!topic/angular/vswXTes_FtM
quelle
Dieser scheint etwas vollständiger zu sein: https://github.com/dump247/angular.tree
quelle
Ein weiteres Beispiel, das auf der Originalquelle basiert , mit einer bereits vorhandenen Beispielbaumstruktur (einfacher zu sehen, wie es funktioniert, IMO) und einem Filter zum Durchsuchen des Baums:
JSFiddle
quelle
So viele großartige Lösungen, aber ich habe das Gefühl, dass sie alle die Dinge auf die eine oder andere Weise etwas komplizieren.
Ich wollte etwas erstellen, das die Einfachheit von @Mark Lagendijks Awnser wiederherstellt, ohne jedoch eine Vorlage in der Direktive zu definieren, sondern den "Benutzer" die Vorlage in HTML erstellen lassen ...
Mit Ideen aus https://github.com/stackfull/angular-tree-repeat usw. habe ich das Projekt erstellt: https://github.com/dotJEM/angular-tree
So können Sie Ihren Baum wie folgt bauen:
Was für mich sauberer ist, als mehrere Direktiven für unterschiedlich strukturierte Bäume erstellen zu müssen ... Im Wesentlichen ist es ein bisschen falsch, das Obige als Baum zu bezeichnen. Es greift viel mehr von @ ganarajs Antwort auf "rekursive Vorlagen" auf, erlaubt es uns aber Definieren Sie die Vorlage, in der wir den Baum benötigen.
(Sie könnten das mit einer Skript-Tag-basierten Vorlage tun, aber sie muss immer noch direkt außerhalb des eigentlichen Baumknotens sitzen, und es fühlt sich immer noch ein bisschen yuk an ...)
Links hier für nur eine andere Wahl ...
quelle
Sie können mit Angular-Tree-DnD- Beispiel mit Angular-Ui-Tree versuchen , aber ich bearbeitet, Kompatibilität mit Tabelle, Raster, Liste.
quelle
Basierend auf @ganaraj ‚s Antwort , und @ dnc253‘ s Antwort , ich nur eine einfache ‚Richtlinie‘ für die Baumstruktur mit Auswahl gemacht, das Hinzufügen, Löschen und Funktion bearbeiten.
Jsfiddle: http://jsfiddle.net/yoshiokatsuneo/9dzsms7y/
HTML:
JavaScript:
quelle
Ja, das ist definitiv möglich. Die Frage hier geht wahrscheinlich von Angular 1.x aus, aber zum späteren Nachschlagen füge ich ein Angular 2-Beispiel hinzu:
Konzeptionell müssen Sie lediglich eine rekursive Vorlage erstellen:
Anschließend binden Sie ein Baumobjekt an die Vorlage und lassen Angular seine Magie wirken. Dieses Konzept ist offensichtlich auch auf Angular 1.x anwendbar.
Hier ist ein vollständiges Beispiel: http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0
quelle
Sie können dafür den Winkelrekursionsinjektor verwenden: https://github.com/knyga/angular-recursion-injector
Ermöglicht das Verschachteln mit unbegrenzter Tiefe und Konditionierung. Neukompilierung nur bei Bedarf und Kompilierung nur der richtigen Elemente. Keine Magie im Code.
Eines der Dinge, die es ermöglichen, schneller und einfacher als die anderen Lösungen zu arbeiten, ist das Suffix "--recursion".
quelle
Wenn die Baumstruktur groß ist, wird Angular (bis zu 1.4.x) beim Rendern einer rekursiven Vorlage sehr langsam. Nachdem ich einige dieser Vorschläge ausprobiert hatte, erstellte ich eine einfache HTML-Zeichenfolge und verwendete sie
ng-bind-html
zum Anzeigen. Dies ist natürlich nicht die Möglichkeit, Angular-Funktionen zu verwendenHier wird eine rekursive Bare-Bones-Funktion gezeigt (mit minimalem HTML-Code):
In der Vorlage wird nur diese eine Zeile benötigt:
Dies umgeht die gesamte Datenbindung von Angular und zeigt den HTML-Code einfach in einem Bruchteil der Zeit der rekursiven Vorlagenmethoden an.
Mit einer Menüstruktur wie dieser (ein partieller Dateibaum eines Linux-Dateisystems):
Die Ausgabe wird:
quelle
Nicht kompliziert.
Controller-Code:
quelle