Vue-Entwicklungsbaumstrukturkomponenten (Komponentenrekursion)

Vue-Entwicklungsbaumstrukturkomponenten (Komponentenrekursion)

In diesem Artikelbeispiel wird der spezifische Code der Vue-Entwicklungsbaumstrukturkomponenten zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

brauchen

Auf einer Seite sollten Produktkategorien angezeigt werden, und jede Kategorie sollte mehrere Unterkategorien haben, und Unterkategorien können wiederum Unterkategorien haben.

Um eine Einzelauswahl von allen zu erreichen, werden die Unterklassen einzeln ausgewählt und die übergeordnete Klasse muss ebenfalls als ausgewählt markiert werden.

Die erste Reaktion ist die Baumstruktur und rekursive Aufrufe. Ich erinnere mich, dass es bei meiner Arbeit an WPF vorgefertigte Komponenten gab und ich auch gelernt habe, den entsprechenden Hintergrund zu schreiben. Dieses Mal werde ich selbst eine Front-End-Komponente schreiben.

Dies ist lediglich eine Vue-Komponente, die ich einige Zeit mit dem Schreiben verbracht habe und die optimiert und erweitert werden kann. Ich teile dies einfach mit euch allen.

Wirkung

erreichen

<Vorlage>
  <div id="BaumMenü">
    <div v-for="(Knoten, Index) in Knoten" :class="{'TreeMenu-row-border-bottom': !depth}">
      <div Klasse="TreeMenu-row">
        <img class="TreeMenu-row-selectimg" src="../assets/img/MembersPriceActivity/selected.png" @click="selectNode(0,node)" v-show="node.IsSelected"/>
        <img class="TreeMenu-row-selectimg" src="../assets/img/MembersPriceActivity/select.png" @click="selectNode(1,node)" v-show="!node.IsSelected"/>
        <div Klasse = "TreeMenu-row-firstdiv" :Klasse = "{'TreeMenu-row-border-bottom': node.ChildTypeList&&node.IsExpanded }" @click = "expandNode(!node.IsExpanded,node)">
          <label v-text="Knoten.Name"></label>
          <img class="TreeMenu-row-arrowimg" src="../assets/img/MembersPriceActivity/top.png" v-if="node.ChildTypeList" v-show="!node.IsExpanded">
          <img class="TreeMenu-row-arrowimg" src="../assets/img/MembersPriceActivity/down.png" v-if="node.ChildTypeList" v-show="node.IsExpanded">
        </div>
        <TreeMenu :nodes="node.ChildTypeList" :fatherIndex="index" :depth="tiefe+1" v-on:selectFatherNode="selectFatherNode" v-if="node.ChildTypeList" v-show="!node.IsExpanded"></TreeMenu>
      </div>
    </div>
  </div>
</Vorlage>

javascript - Argumente:

<Skript>
  Standard exportieren{
    Name: "TreeMenu",
    Daten () {
      zurückkehren {
        Warentyp: {
          AUSWEIS: '',
          Übergeordnete ID: '',
          Name: '',
          Code: '',
          Stufe: 0,
          ImgUrl: null,
          UntergeordneteTypliste: []
        }
      }
    },
    Requisiten: {
      Knoten: {
        Typ: Array,
        Standard: () => {
          zurückkehren []
        }
      },
      VaterIndex: {
        Typ: Nummer,
        Standard: 0
      },
      Tiefe:
        Typ: Nummer,
        Standard: 0
      }
    },
    betrachten: {},
    erstellt () {},
    montiert () {},
    zerstört () {},
    Methoden: {
      // Aktuellen Knoten auswählen/abbrechen selectNode (choice, node) {
        node.IsSelected = Auswahl
        dies.selectChildrenNode(Auswahl, Knoten.ChildTypeList || [])
        dies.$emit('selectFatherNode', Auswahl, dies.fatherIndex, dies.nodes.every((node) => { return node.IsSelected === Auswahl }))
      },
      // Ändere den ausgewählten Status der untergeordneten Knoten selectChildrenNode (choice, nodes, self) {
        lass _self = self || dies
        nodes.forEach((node) => { node.IsSelected = Auswahl; _self.selectChildrenNode(Auswahl, node.ChildTypeList || [], _self) })
      },
      //Überprüfen, ob der ausgewählte Status als übergeordneter Knoten geändert werden muss (nur für Aufrufe untergeordneter Knoten)
      selectFatherNode (Auswahl, Index, Kinderstatus) {
        wenn (Auswahl) {
          // Wenn alle untergeordneten Knoten unter dem Knoten [Index] ausgewählt sind, sollte der Knoten [Index] ausgewählt werden, wenn (childrenState) {
            this.nodes[index].IsSelected = Auswahl
            dies.$emit('selectFatherNode', Auswahl, dies.fatherIndex, dies.nodes.every((node) => { return node.IsSelected === Auswahl }))
          }
        } anders {
          // Wenn ein untergeordneter Knoten unter dem Knoten [Index] nicht ausgewählt ist, sollte die Auswahl des Knotens [Index] aufgehoben werden. this.nodes[index].IsSelected = Auswahl
          dies.$emit('selectFatherNode', Auswahl, this.fatherIndex, falsch)
        }
      },
      // Den aktuellen Knoten erweitern/reduzieren expandNode (Auswahl, Knoten) {
        node.IsExpanded = Auswahl
        wenn (!Wahl) {
          this.expandChildrenNode(Auswahl, Knoten.ChildTypeList)
        }
      },
      // untergeordnete Knoten ausblenden expandChildrenNode (Auswahl, Knoten, selbst) {
        lass _self = self || dies
        nodes.forEach((node) => { node.IsExpanded = Auswahl; _self.expandChildrenNode(Auswahl, node.ChildTypeList || [], _self) })
      }
    }
  }
</Skript>

CSS:

<style lang="scss" scoped>
  #BaumMenü {
    .TreeMenu-Zeile{
      Rand links: 30px;
      Schriftgröße: 15px;
      Polsterung: 12px 0 0 0;
    }
    .TreeMenu-row-firstdiv{
      Höhe: 32px;
      Rand links: 30px;
    }
    .TreeMenu-row-arrowimg{
      schweben: rechts;
      Rand rechts: 15px;
      Breite: 13px;
    }
    .TreeMenu-row-selectimg{
      schweben: links;
      Breite: 18px;
      vertikale Ausrichtung: Text unten;
    }
    .TreeMenu-row-border-bottom{
      Rahmen unten: durchgezogen 1px #e6e6e6;
    }
    .TreeMenu-row-border-top{
      Rahmen oben: durchgezogen 1px #e6e6e6;
    }
  }
</Stil>

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Rekursive Vue.js-Komponente zur Implementierung eines Baummenüs (Beispielfreigabe)
  • Der Vue.js-Komponentenbaum implementiert ein Baummenü mit unbegrenzten Ebenen
  • Vuejs verwendet rekursive Komponenten, um Baumverzeichnisse zu implementieren
  • Der Vue-Komponentenbaum implementiert ein Baummenü
  • Der Vue2-Komponentenbaum implementiert ein Baummenü mit unbegrenzten Ebenen
  • Beispielcode basierend auf der Baumauswahlkomponente von Vue
  • Verwenden rekursiver Vue.js-Komponenten zum Implementieren eines einklappbaren Baummenüs (Demo)
  • Vue-Komponentenvorlagenformular zum Realisieren der Objektarray-Datenschleife in einer Baumstruktur (Beispielcode)
  • Rekursive Vue2-Komponente zur Implementierung eines Baummenüs
  • Rekursive Vue.js-Komponente zum Erstellen eines Baummenüs

<<:  Lösung des Konflikts zwischen Linux-Kernel- und SVN-Versionen

>>:  MySQL-Optimierungstipps: Analyse der Implementierungsmethoden zur Duplikatsentfernung [Millionen von Daten]

Artikel empfehlen

Html+css, um reinen Text und Schaltflächen mit Symbolen zu erreichen

Dieser Artikel fasst die Implementierungsmethoden...

Probleme mit der Rancher-Bereitstellung und dem Importieren von K8S-Clustern

Die Rancher-Bereitstellung kann über drei Archite...

Details zum JavaScript-Prototyp

Inhaltsverzeichnis 1. Übersicht 1.1 Was ist ein P...

Beispiel zum Verlassen der Schleife in Array.forEach in js

Inhaltsverzeichnis forEach() Methode So springen ...

So verstehen Sie die Dateninteraktion und -anzeige im Vue-Frontend und -Backend

Inhaltsverzeichnis 1. Technischer Überblick 2. Te...

Detaillierte Erklärung der Filter und Anweisungen in Vue

Inhaltsverzeichnis benutzerdefinierte Vue-Direkti...

Zusammenfassung wichtiger Komponenten von MySQL InnoDB

Innodb umfasst die folgenden Komponenten 1. innod...

Verwenden Sie das Firebug-Tool, um die Seite auf dem iPad zu debuggen

Wie debuggt man eine Seite auf dem iPad? Wenn Sie ...

Eine kurze Einführung in die Basiskomponenten der VUE uni-app

1. Scroll-Ansicht Beim vertikalen Scrollen müssen...

HTML-Tabellen-Tag-Tutorial (25): vertikales Ausrichtungsattribut VALIGN

In vertikaler Richtung können Sie die Zeilenausri...

Tutorial zur HTML-Tabellenauszeichnung (37): Hintergrundbild-Attribut BACKGROUND

Legen Sie das Hintergrundbild für die Tabellenübe...