Über die Baumdarstellung von Vue wird im Projekt gehandhabt: Das Effektdiagramm wird asynchron in Form eines Baums dargestellt: Offizielle Dokumentation von Element-UI, El-Tree gefunden. (Adresse: https://element.eleme.cn/#/zh-CN/component/tree ) Projektanforderungen: Anzeige im Lazy-Loading-Format, das Verzeichnis muss neue Bearbeitungs- und Löschvorgänge sowie eine Aktualisierung der Baumstruktur nach dem Vorgang gemäß den Anforderungen aufweisen Also, lasst uns jetzt anfangen. eins, Lazy Loading: Das Lazy Loading von Tree wird durch ein Attribut gesteuert: lazy. Um Lazy zu verwenden, müssen Sie zum Laden der Daten das Prinzip des Rendering-Baums verwenden: Durch die Initialisierung wird die Ladefunktion ausgelöst, um zuerst die Anfangsdaten zu laden. Durch Klicken auf einen Knoten wird die Ladefunktion ausgelöst, um die untergeordneten Knoten unter diesem Knoten zu laden. zwei, Benutzerdefinierter Knoten: Fügen Sie nach dem Knoten eine Aktionsschaltfläche hinzu Auf der offiziellen Website gibt es Beispiele für einfache Beispiele ** Sprechen Sie hauptsächlich über das Aktualisieren von Knoten ** // refreshNode: der zu aktualisierende Knoten; newNodeData: neue Daten des untergeordneten Knotens refreshNode.splice(0, refreshNode.length); Aktualisieren Sie Node.doCreateChildren(newNodeData); Verstehen Sie Folgendes: menuNodeClick(Daten, Knoten, Baumknoten) { this.selectNodeData = Daten this.selectNode = Knoten } 2>. Aktualisieren Sie den Knoten nach dem Knotenvorgang. Sie können je nach Szenario wählen, ob Sie den aktuellen Knoten (Knoten) oder den übergeordneten Knoten des aktuellen Knotens (Knoten.übergeordnet) aktualisieren möchten: /** * Knotendaten aktualisieren * @node [Knoten/Objekt]: Knoten aktualisieren, alle Knoten unter dem Knoten aktualisieren * @type [Zeichenfolge]: Knotentyp, „Knoten“ bedeutet, dass der Knoten die Knoteninformationen des Baums sind; „Daten“ bedeutet, dass der Knoten die Daten in den Knoteninformationen des Baums sind */ refreshTreeNode(Knoten, Typ) { lass Node aktualisieren; // Den untergeordneten Knoten des zu aktualisierenden Knotens abrufen if(type === 'node') { Knoten aktualisieren = Knoten.Unterknoten }sonst wenn(Typ === 'Daten') { lass getNode = this.$refs.tree.getNode(Knoten) RefreshNode = getNode.childNodes } // Den ursprünglichen untergeordneten Knoten löschen refreshNode.splice(0, refreshNode.length); //Daten erneut anfordern und Knoten aktualisieren this.requestTreeNode(node) } 3. Kontrollkästchen auswählen: Wenn beim Lazy Loading ein Auswahlfeld vorhanden ist, müssen die Daten mit dem Auswahlfeld geladen und dann über das Attribut default-checked-keys überprüft und die erweiterten Knoten über default-expanded-keys festgelegt werden. 4. Einzelauswahl: // Den aktuellen Knoten so einstellen, dass dieser ausgewählt wird.$refs.tree.setCurrentKey( dies.selectNodeData[dieses.nodeKey] ) Unabhängig davon, ob eine Einzel- oder Mehrfachauswahl erfolgt, muss der Hintergrund beim ersten Laden nicht nur die ausgewählten Informationen bereitstellen, sondern auch alle Knoteninformationen des Zweigs, in dem sich der ausgewählte Knoten befindet, und diese den standardmäßig erweiterten Schlüsseln zuweisen, damit der Zweig, in dem sich der Knoten befindet, von oben bis zu den Auswahlelementen erweitert werden kann. Oftmals stellt das Backend jedoch nur Informationen zu dem ausgewählten Wert bereit, sodass das Frontend die Daten selbst kapseln und die zu erweiternden Zweiginformationen abrufen muss. Je nach Datenformat werden unterschiedliche Methoden verwendet
Dieses Datenformat kann sowohl die Situation [auf eine Ebene klicken, eine Ebene laden] als auch [auf eine Ebene klicken, mehrere Ebenen von untergeordneten Knoten der angeklickten Ebene laden] erfüllen. Im ersten Fall ist keine Datenverarbeitung erforderlich. Im zweiten Fall muss in jedes Datenelement ein Feld eingefügt werden, um die übergeordneten und untergeordneten Knoten zu verknüpfen. Anschließend werden die Daten in das von el-tree benötigte Format gekapselt und eine rekursive Funktion wird zum Integrieren der Daten verwendet (vorausgesetzt, das verknüpfte Feld ist parentId, nodeKey ist id, das untergeordnete Knotenfeld des Baums ist children und es müssen mehrere Ebenen von untergeordneten Knoten mit der ID „N“ geladen werden). (Hinweis: Rekursive Funktionen wirken sich auf die Leistung aus. Verwenden Sie sie daher mit Vorsicht.) 2). Mehrschichtige Daten (vorausgesetzt, der Attributname des untergeordneten Knotens lautet „children“) [ { ..., Kinder: [ { ..., Kinder: [ { ..., Kinder: [...], }, { ..., Kinder: [...], } ] }, { ..., Kinder: [ { ..., Kinder: [...], } ] } ] } ] Daten in diesem Format können sowohl in einschichtigen als auch in mehrschichtigen Szenarios verwendet werden und erfordern keinerlei Verarbeitung. Beispiel für Lazy Loading: <el-Baum :data="BaumDaten" :props="StandardProps" :load="NodeTree laden" @node-click="Klick auf Knoten handhaben" faul :Erweitern beim Klicken auf Knoten="false" :Standard-erweiterte-Schlüssel="['1']" Knotenschlüssel="id" :highlight-current="wahr" > <span class="custom-tree-node" slot-scope="{ Knoten, Daten }"> <span class="treeLeft">{{ node.label }}</span> <span Klasse="BaumRechts"> <i v-if="Knotenebene === 1" @click="() => appendNode(Knoten, Daten)" Klasse="el-icon-plus" Stil="Farbe: blau" ></i> <!--Gruppe hinzufügen--> <!-- Der Stammknoten muss nicht gelöscht oder umbenannt werden--> <i v-if="data.id !== 0" @click="() => deleteNode(Knoten, Daten)" Klasse="el-icon-delete" Stil="Farbe: rot" ></i> <!--Gruppe löschen--> <i v-if="data.id !== 0" @click="() => editNode(Knoten, Daten)" Klasse="el-icon-edit" Stil="Farbe: blau" ></i> <!--Gruppe umbenennen--> </span> </span> </el-Baum> Ansicht: // Baummenü treeData: [], // Baumknoten defaultProps: { // Standardparameter des Datenarrays von el-tree ändern children: 'children', Bezeichnung: "Name", id: "ID", parentId: "übergeordneteID", isLeaf: 'leaf' // Gibt an, ob der Knoten ein Blattknoten ist, was nur gültig ist, wenn das Lazy-Attribut angegeben ist}, Methoden: // Baumdaten laden loadNodeTree(node, resolve) { const das = dies wenn (Knotenebene === 0) { that.loadtreeData(Knoten, auflösen) } sonst wenn (Knotenebene === 1) { that.getChildByList(Knoten, auflösen) } }, // Get loadtreeData ist das Abrufen der Daten des übergeordneten Knotens, getChildByList dient zum asynchronen Abrufen der Daten des untergeordneten Knotens loadtreeData(nodeData, resolve) { const Datentyp = { Seitenindex: 1, Seitengröße: 100000 } getAlltype(Datentyp) .then(res => { const rootChildren = [] wenn (res.code === 200) { const data = res.data.list Daten.map(Element => { rootChildren.push({ Name: Artikel.TypName, übergeordnete ID: '', ID: Artikel-ID, Blatt: falsch, Kinder: [] }) }) //Wenn resolve Inhalt hat, wird dieser verzögert geladen und abgefragt, andernfalls wird er geändert if (resolve) { auflösen(RootChildren) } anders { nodeData.childNodes = [] nodeData.doCreateChildren(rootChildren) } } anders { lösen([]) } }) }, // Untergeordneten Knoten abrufen Anfrage getChildByList(nodeData, resolve) { var _parentID = nodeData.data.id const Typspezifikation = { Typ-ID: _Eltern-ID, Seitenindex: 1, Seitengröße: 100000 } getAlltypeSpec(typeSpec).then(res => { const rootChildren = [] wenn (res.code === 200) { const data = res.data.list Daten.map(Element => { rootChildren.push({ Name: Artikelbeschreibung, übergeordnete ID: Artikel.Typ-ID, ID: Artikel-ID, Blatt: wahr, Kinder: [] }) }) wenn (auflösen) { auflösen(RootChildren) } anders { nodeData.childNodes = [] nodeData.doCreateChildren(rootChildren) } } anders { return false } }).catch(err => { console.log(fehler) }) }, // Knotenklickereignis handleNodeClick(data, node) { this.addnode = Knoten this.adddata = Daten wenn (Knotenebene === 1) { this.queryForm.typeId = node.data.id this.queryForm.typeSpecId = '' } sonst wenn (Knotenebene === 2) { this.queryForm.typeId = node.data.parentId this.queryForm.typeSpecId = node.data.id } diese.Abfrage() }, Knotenoperation: Knoten hinzufügen, Knoten ändern, Knoten löschen (bedienen Sie Ihren eigenen Knoten, um die übergeordneten Knoteninformationen weiterzugeben und Ihren aktuellen Knoten zu finden; bedienen Sie den untergeordneten Knoten, um den aktuellen Knoten weiterzugeben. Fazit: übergeordneter Knoten bedient untergeordneten Knoten). // Baumknoten fügt Typspezifikation hinzu appendNode(node, data) { diese.addTypesSpec = { Typname: node.data.name, Typ-ID: node.data.id } this.createTypesSpecDialog = true }, // Baumtypänderung editNode(node, data) { const typeId = node.data.parentId // Typ der Ebene 1, wenn (node.level === 1) { this.editTypesDialog = true diese.editTypes = { ID: node.data.id, Typname: node.data.name } } anders { this.editTypesSpecDialog = true dies.getSelectTypes() // dies.editTypesSpec = Object.assign({}, node.data) diese.editTypesSpec = { Typ-ID: Typ-ID, ID: node.data.id, Beschreibung: node.data.name } } }, // Baumtyp löschen deleteNode(node, data) { // Typ der Ebene 1, wenn (node.level === 1) { this.$msgbox.confirm('Dieser Vorgang löscht die Asset-Typ-Daten. Möchten Sie fortfahren?', 'Löschaufforderung', { confirmButtonText: 'Bestätigen', cancelButtonText: 'Abbrechen', Typ: "Warnung" }).then(() => { TypDel(Knoten.Daten.ID).dann( bzw. => { this.$message('Erfolgreich gelöscht') diese.Abfrage() dies.loadNodeTree(Knoten.übergeordnet) }, err => { console.log('fehler', fehler) } ) }).catch(() => { this.$message.error('Abgebrochen') }) } anders { this.$msgbox.confirm('Dieser Vorgang löscht die Spezifikationsdaten des Asset-Typs. Möchten Sie fortfahren?', 'Löschaufforderung', { confirmButtonText: 'Bestätigen', cancelButtonText: 'Abbrechen', Typ: "Warnung" }).then(() => { TypSpecDel(Knoten.Daten.ID).dann( bzw. => { dies.loadNodeTree(Knoten.übergeordnet) this.$message('Erfolgreich gelöscht') diese.Abfrage() }, err => { console.log('fehler', fehler) } ) }).catch(() => { this.$message.error('Abgebrochen') }) } }, Nachdem der Knoten ausgelöst wurde, wird ein Popup-Fenster angezeigt. Das normale Popup-Fenster wird hinzugefügt, geändert oder gelöscht. Nach dem Senden der Hintergrundanforderung und der Rückgabe des erfolgreichen Vorgangs muss die Baumstruktur jedoch erneut geladen werden. Daher wird die Ladebaummethode hier erneut aufgerufen. Der übergebene Knoten kann gespeichert werden, wenn der Baum ausgelöst und angeklickt wird. Meine Methode ist handleNodeClick. Diese Methode speichert den angeklickten Knoten, unabhängig davon, ob er geändert, hinzugefügt oder gelöscht wird. this.$message('Bearbeiten erfolgreich') dies.loadNodeTree(dieses.addnode.parent) 1. Expansion und Kontraktion festlegen wenn (!node.expanded) { node.expand(); }anders { Knoten.collapse(); } 2. Holen Sie sich den übergeordneten Knoten Knoten übergeordneter Knoten Wenn Sie es verstehen, lesen Sie es einfach. Der Code kann optimiert werden, aber ich habe in letzter Zeit nicht viel Zeit. Wenn Sie es nicht verstehen, ist es in Ordnung, solange Sie diese Logik verstehen. Bis zum nächsten Mal Dies ist das Ende dieses Artikels über die Verwendung von El-Tree Lazy Loading durch Vue für Hinzufügungen, Löschungen, Änderungen und Abfragen. Weitere verwandte Inhalte zu Vue El-Tree Lazy Loading finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: So ändern Sie die Apt-Get-Quelle in Ubuntu 18.04
>>: Analyse gängiger Anwendungsbeispiele von MySQL-Prozessfunktionen
MySQL richtet eine unabhängige Schreibtrennung ei...
Lernziele: Lernen Sie, MySQL-Datenbanken unter de...
In diesem Artikel finden Sie das Tutorial zur Ins...
Lassen Sie uns die Funktion von Taobao nachahmen,...
Vorwort: Die MySQL-Master-Slave-Architektur dürft...
Inhaltsverzeichnis Bedingte Kompilierung Seitenla...
1. Die Bedeutung des Aufbaus eines Nexus-Dienstes...
Systemumgebung: Win10 64-bit MySQL-Version: mysql...
Das Prinzip besteht darin, zuerst ein Div mit ein...
Socket-Optionsfunktion Funktion: Methoden zum Les...
Canvas ist ein neues Tag in HTML5. Sie können js ...
MySQL 5.7 MySQL-Befehlszeilenclient mit Befehlen ...
Lösung Verzichten Sie auf die Linux-VM, die mit D...
Es ist ganz einfach, gehen Sie einfach zum Tutori...
Dieser Artikel beschreibt, wie mehrere Instanzen ...