Vue verwendet el-tree Lazy Loading, um die Funktionen Hinzufügen, Löschen, Ändern und Abfragen zu implementieren.

Vue verwendet el-tree Lazy Loading, um die Funktionen Hinzufügen, Löschen, Ändern und Abfragen zu implementieren.

Über die Baumdarstellung von Vue wird im Projekt gehandhabt: Das Effektdiagramm wird asynchron in Form eines Baums dargestellt:

Anzeigediagramm der Baumstruktur

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,

Bildbeschreibung hier einfügen

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.
Vorteile: Geeignet für große Datenmengen und einfach zum Aktualisieren einiger Knoten

zwei,

Bildbeschreibung hier einfügen

Benutzerdefinierter Knoten: Fügen Sie nach dem Knoten eine Aktionsschaltfläche hinzu

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Auf der offiziellen Website gibt es Beispiele für einfache Beispiele

**

Sprechen Sie hauptsächlich über das Aktualisieren von Knoten

**
Wenn Sie einen Knoten bearbeiten oder löschen, muss der Baum aktualisiert werden. Sie müssen nur den Knoten aktualisieren, nicht den gesamten Baum.
Prinzip : Wenn ein Knoten aktualisiert wird, werden tatsächlich die untergeordneten Knoten des Knotens aktualisiert, nicht der Knoten selbst. Löschen Sie die untergeordneten Knoten dieses Knotens und fordern Sie die Daten erneut an, um die untergeordneten Knotendaten dieses Knotens zum erneuten Rendern zu erhalten.

// refreshNode: der zu aktualisierende Knoten; newNodeData: neue Daten des untergeordneten Knotens refreshNode.splice(0, refreshNode.length);
Aktualisieren Sie Node.doCreateChildren(newNodeData);

Verstehen Sie Folgendes:
1>. Die Knotenklickmethode ruft die Funktion menuNodeClick auf, um die angeklickten Knoteninformationen aufzuzeichnen. Bevor Sie einen Knoten bedienen, müssen Sie zuerst klicken, um einen Knoten auszuwählen. Diese Funktion wartet auf Knotenklickereignisse und wird ausgelöst, solange auf den Knoten geklickt wird:

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:
Wenn beim Lazy Loading nur eine Option vorhanden ist, setzen Sie diese einfach auf „Ausgewählt“:

// 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
1) Baumförmiges einschichtiges Datenformat:

[
{...},
{...},
{...}
]

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.
Der ausgewählte Wert integriert und erweitert den Baum, in dem sich der ausgewählte Wert befindet: Der Hintergrund kann den Wert des gesamten Zweigs angeben, in dem sich der ausgewählte Knoten für mehrschichtige Daten befindet, und ihn zur Erweiterung den standardmäßig erweiterten Schlüsseln zuweisen. Sie können die Filterung auch selbst durchführen, eine rekursive Funktion schreiben, die mehrschichtigen Daten durchlaufen und den Zweig des Knotens mit dem ausgewählten Wert finden, um die Erweiterung festzulegen (vorausgesetzt, der Knotenschlüssel ist „id“, das untergeordnete Knotenfeld des Baums ist „children“ und Sie müssen den gesamten Zweig erweitern, in dem sich der Knoten mit der ID „N“ befindet).

Beispiel für Lazy Loading:
HTML-Steuerelemente:

<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:
Definieren von Variablen in Daten

 // 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:
Laden des Baummenüabschnitts

 // 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:
  • Verwenden von vue3+ts zum Implementieren des Verwaltungshintergrunds (Hinzufügen, Löschen, Ändern und Überprüfen)
  • Vue implementiert den Beispielcode zum Hinzufügen, Löschen, Ändern und Überprüfen der Baumstruktur
  • Vue verwendet Element, um die Schritte Hinzufügen, Löschen, Ändern und Verpacken zu implementieren
  • VUE+Element implementiert Beispiel-Quellcode zum Hinzufügen, Löschen, Ändern und Prüfen
  • Einfache Vue-Operationen zum Hinzufügen, Löschen, Ändern und Prüfen
  • Detaillierte Erläuterung der Funktionen zum Hinzufügen, Löschen, Ändern und Abfragen der Vue-Benutzerverwaltung

<<:  So ändern Sie die Apt-Get-Quelle in Ubuntu 18.04

>>:  Analyse gängiger Anwendungsbeispiele von MySQL-Prozessfunktionen

Artikel empfehlen

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.18

Lernziele: Lernen Sie, MySQL-Datenbanken unter de...

VMWare Linux MySQL 5.7.13 Installations- und Konfigurationstutorial

In diesem Artikel finden Sie das Tutorial zur Ins...

jQuery implementiert das Ausblenden und Anzeigen von HTML-Elementen

Lassen Sie uns die Funktion von Taobao nachahmen,...

Erfahrungsaustausch zur MySQL-Slave-Wartung

Vorwort: Die MySQL-Master-Slave-Architektur dürft...

Eine kurze Diskussion über bedingte Kodierung und Seitenlayout der VUE-Uni-App

Inhaltsverzeichnis Bedingte Kompilierung Seitenla...

Detaillierte Schritte zum Einrichten eines Nexus-Servers

1. Die Bedeutung des Aufbaus eines Nexus-Dienstes...

Beispielcode zur Eingabe des Kennzeichens und der Provinzkürzel in html

Das Prinzip besteht darin, zuerst ein Div mit ein...

Implementierung von Socket-Optionen in der Linux-Netzwerkprogrammierung

Socket-Optionsfunktion Funktion: Methoden zum Les...

JS verwendet Canvas-Technologie, um Echarts-Balkendiagramme zu imitieren

Canvas ist ein neues Tag in HTML5. Sie können js ...

MySQL 5.7 MySQL-Befehlszeilenclient - Befehlsdetails

MySQL 5.7 MySQL-Befehlszeilenclient mit Befehlen ...