Vue ElementUI implementiert einen asynchronen Ladebaum

Vue ElementUI implementiert einen asynchronen Ladebaum

In diesem Artikelbeispiel wird der spezifische Code von vue ElementUI zur Implementierung eines asynchronen Ladebaums zu Ihrer Information geteilt. Der spezifische Inhalt ist wie folgt

Routing-Datei ändern

Liste aus '@/components/list.vue' importieren
importiere Add aus '@/components/add.vue'
Importiere Tree aus '@/components/tree.vue'
importiere AsynTree aus '@/components/asyntree.vue'

Standard exportieren{
    Routen:[
        {Pfad:"/Liste",Komponente:Liste},
        {Pfad:"/Hinzufügen",Komponente:Hinzufügen},
        {Pfad:"/add/:id",Komponente:Hinzufügen},
        {Pfad:"/Baum",Komponente:Baum},
        {Pfad:"/asyntree",Komponente:AsynTree}
    ]

}

Homepage app.vue

<Vorlage>
  <div id="app">
    <router-link to="/add">Hinzufügen</router-link>&nbsp;&nbsp;
    <router-link to="/list">Liste</router-link>&nbsp;&nbsp;
    <router-link to="/tree">Baumstruktur</router-link>&nbsp;&nbsp;
    <router-link to="/asyntree">Asynchrone Baumstruktur</router-link>&nbsp;&nbsp;
    <Router-Ansicht></Router-Ansicht>
  </div>
</Vorlage>

<Skript>
Liste aus „./components/list.vue“ importieren

Standard exportieren {
  Name: "App",
  Komponenten:
    Liste
  }
}
</Skript>

<Stil>
#app {
  Schriftfamilie: „Avenir“, Helvetica, Arial, serifenlos;
  -webkit-font-smoothing: Kantenglättung;
  -moz-osx-font-smoothing: Graustufen;
  Textausrichtung: zentriert;
  Farbe: #2c3e50;
  Rand oben: 60px;
}
</Stil>

Asynchrones Laden der Baumseite

<Vorlage>


<el-container>
  <el-aside Breite="200px">
    <el-tree ref="Baum"
    :data="Daten"
    faul
    Kontrollkästchen anzeigen
    Knotenschlüssel="id"
    streng prüfen
    :load="Ladeknoten"
    :props="StandardProps"
    @node-click="nodeclick">
    </el-Baum>
  </el-beiseite>
  <el-main>

    <el-form :model="Typinfo" Klasse="Demo-Formular-Inline">
    <el-form-item label="Ich würde">
        <el-input v-model="typeinfo.id" schreibgeschützt></el-input>
    </el-form-item>
    <el-form-item label="Kategoriename">
        <el-input v-model="typeinfo.label" placeholder="Kategoriename"></el-input>
    </el-form-item>
    <el-form-item label="Seriennummer">
        <el-input v-model="typeinfo.seqno" placeholder="Seriennummer"></el-input>
    </el-form-item>
   <el-form-item label="Übergeordnete ID">
        <el-input v-model="typeinfo.pid" schreibgeschützt></el-input>
    </el-form-item>
    <el-form-item>
        <el-button type="primary" @click="dosave">Speichern</el-button>
        <el-button type="primary" @click="dochildsave">Knoten hinzufügen</el-button>
    </el-form-item>
    </el-form>

  </el-main>
</el-container>

</Vorlage>

<Skript>
Axios von „Axios“ importieren

Standard exportieren {
    Daten() {
        zurückkehren {
            data:[], //Datenmodell des Baumobjekts defaultProps: { //Korrespondenz der Eigenschaften des Baumobjekts children: 'children',
                Bezeichnung: „Bezeichnung“
            },
            typeinfo: {//Produktklassifizierungs-Entitätsobjekt-ID:'',
                pid:'',
                Etikett: '',
                Sequenznummer: ''
            }
        }
    },
    Methoden: {
        Knoten laden(Knoten, auflösen){
            //Wenn Sie den Knoten der ersten Ebene erweitern, laden Sie die Knotenliste der ersten Ebene aus dem Hintergrund, wenn (node.level==0)
            {
                dies.loadfirstnode(auflösen);
            }
            //Wenn Sie Knoten anderer Ebenen erweitern, laden Sie die Knotenliste der nächsten Ebene dynamisch aus dem Hintergrund, wenn (node.level>=1)
            {
                dies.loadchildnode(Knoten,auflösen);
            }
        },
        //Lade den Knoten der ersten Ebene loadfirstnode(resolve){
            axios.get('http://localhost:6060/loadtype')
                .dann(Funktion(bzw.){
                    auflösen(bzw.Daten);
                })
        },
        //Baumkomponente aktualisieren refreshtree(){
            var _this = dies;
            axios.get('http://localhost:6060/loadtype')
                .dann(Funktion(bzw.){
                    _diese.Daten = bzw.Daten;
                })
        },
        //Lade die Sammlung untergeordneter Knoten des Knotens loadchildnode(node,resolve){
            axios.get('http://localhost:6060/loadtypechild?pid='+node.data.id)
                .dann(Funktion(bzw.){
                    auflösen(bzw.Daten);
                })
        },
        //Klicken Sie auf das Ereignis, das auf dem Knoten ausgelöst wird. Übergeben Sie drei Parameter. Das Datenobjekt verwendet den ersten Parameter nodeclick(data,dataObj,self).
        {
            //Alarm(Daten.label+",id="+Daten.id);
            dies.typeinfo.id=data.id;
            dies.typeinfo.pid=data.pid;
            dies.typeinfo.label=Datenlabel;
            diese.typeinfo.seqno=Daten.seqno;
        },
        //Klassifizierungsmethode speichern dosave()
        {
            var _this = dies;
             axios.post('http://localhost:6060/savetype',diese.typeinfo)
                .dann(Funktion(bzw.){
                    wenn(bzw.Daten)
                        _this.refreshtree();
                })
        },
        //Unterklassifizierungsmethode speichern dochildsave()
        {
            //Beurteilen, ob im linken Baum ein Knoten ausgewählt ist. componentvar cnt=this.$refs['tree'].getCheckedNodes().length;
            wenn(cnt!=1)
            {
                this.$message('Sie müssen einen eindeutigen übergeordneten Knoten auswählen');
                zurückkehren;
            }
            //Holen Sie sich das Baumobjekt über this.$refs['tree'], wobei tree das Ref-Attribut der Baumkomponente ist var dataObj = this.$refs['tree'].getCheckedNodes()[0];
    
            diese.typeinfo.id='';
            dies.typeinfo.pid=dataObj.id;
            var _this = dies;
            axios.post('http://localhost:6060/savetype',diese.typeinfo)
                .dann(Funktion(bzw.){
                    wenn(bzw.Daten)
                        _this.refreshtree();
                })
        }
    }

}
</Skript>

Hintergrund-Controller

@RequestMapping("/Ladetyp")
 @AntwortBody
 öffentliche Liste<TypeInfo> getTypeJson()
 {
  Liste<Typinfo> rtn = getFirstNode();
  
  Rückflug rtn;
 }
  
 @RequestMapping("/LadetypKind")
 @AntwortBody
 öffentliche Liste<TypeInfo> getTypeByPid(Integer pid)
 {
  System.out.println("pid==="+pid);
  Liste<Typinfo> rtn = addsrv.getTypeList(pid);
  
  Rückflug rtn;
 }
 
 private Liste<TypeInfo> getFirstNode()
 {
  TypeInfo root = addsrv.getRootType();
  Liste<TypeInfo> ersteListe = addsrv.getTypeList(root.getId());
  für(TypeInfo ti:firstList)
   recurseNode(ti);
  gib die erste Liste zurück;
 }
 
 private void recurseNode(TypeInfo ti)
 {
  Liste<TypeInfo> untergeordnete Elemente = addsrv.getTypeList(ti.getId());
  System.out.println("ti.id"+ti.getId()+",children="+children);
  wenn (Kinder == null || Kinder.Größe() == 0)
   zurückkehren;
  ti.setChildren(Kinder);
  für(TypeInfo chd:children)
  {
   recurseNode(chd);
  }
 }
 
 @RequestMapping("/Speichertyp")
 @AntwortBody
 öffentlicher Boolean-Speichertyp(@RequestBody TypeInfo ti)
 {
  versuchen {
   Integer-ID = ti.getId();
   wenn(id != null)
    addsrv.updateType(ti);
   anders {
    addsrv.saveType(ti);
   }
   gibt true zurück;
  } Fang (Ausnahme e) {
   gibt false zurück;
  }
  
 }

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:
  • Lösen Sie das Problem, dass das dynamische Routing von Vue Importkomponenten asynchron lädt und Module nicht laden kann
  • Detaillierte Erläuterung der Lösung für das Problem des asynchronen Ladens von Modulen beim Importieren von Vue-Router
  • Vue + echarts realisiert die Methode zum dynamischen Zeichnen von Diagrammen und zum asynchronen Laden von Daten
  • Fehler beim asynchronen Laden von Daten beim Vue Awesome Swiper
  • Implementierung des asynchronen Ladens von Amap durch Vue
  • Detaillierte Erläuterung von drei Anwendungsbeispielen von Vue + Webpack für asynchrones Laden
  • Vue lädt die About-Komponente asynchron
  • Detaillierte Erläuterung einiger Punkte, die beim asynchronen Laden von Daten in Vue-Cli zu beachten sind
  • Javascript vue.js Tabellenpaging, Ajax asynchrones Laden von Daten
  • Vue.js-Tabellenpaging, Ajax, asynchrones Laden von Daten

<<:  Detaillierte Erläuterung des Index und der Speicherstruktur der MySQL InnoDB-Engine

>>:  Tutorial zur Installation und Konfiguration einer virtuellen Linux-Maschine unter dem Windows-Betriebssystem

Artikel empfehlen

So migrieren Sie den MySQL-Speicherort auf eine neue Festplatte

1. Bereiten Sie eine neue Festplatte vor und form...

mysql charset=utf8 verstehen Sie wirklich, was es bedeutet

1. Schauen wir uns zunächst eine Anweisung zur Ta...

Neue Funktionen von JS ES: Einführung in Erweiterungsoperatoren

1. Spread-Operator Der Spread-Operator besteht au...

Tutorial zur DHCP-Konfiguration in der CentOS7-Umgebung

Inhaltsverzeichnis Konfigurationsbefehlsschritte ...

Analyse des Docker-Compose-Image-Release-Prozesses des Springboot-Projekts

Einführung Das Docker-Compose-Projekt ist ein off...

So erhalten Sie den Maximal- oder Minimalwert einer Zeile in SQL

Originaldaten und Zieldaten SQL-Anweisungen imple...

Lösung für Linux, das nicht alle Befehle unterstützt

Was soll ich tun, wenn Linux nicht alle Befehle u...

Spezifische Verwendung von GNU Parallel

Was ist das? GNU Parallel ist ein Shell-Tool zum ...

So wählen Sie die Transaktionsisolationsebene in einem MySQL-Projekt

Einführung Beginnen wir mit unserem Inhalt. Ich g...

Einführung in die Containerfunktion of() in der Linux-Kernel-Programmierung

Vorwort Bei der Linux-Kernel-Programmierung werde...