Heim >Web-Frontend >js-Tutorial >Vue implementiert die Datenfunktion zur Baumansicht
Dieser Artikel stellt hauptsächlich die Implementierung der Baumansichtsdatenfunktion vor. Jetzt kann ich ihn mit Ihnen teilen.
Verwenden Sie einen einfachen Baum Ansicht zum Implementieren, vertraut mit der rekursiven Verwendung von Komponenten
Dies sind die simulierten Baumdiagrammdaten
let all={ name:'all', children:{ A:{ name:'A', children:{ a1:{ name:'a1', children:{ a11:{ name:'a11', children:null }, a12:{ name:'a12', children:null } } }, a2:{ name:'a2', children:{ b21:{ name:'b21', children:null } } } } }, B:{ name:'B', children:{ b1:{ name:'b1', children:{ b11:{ name:'b11', children:null }, b12:{ name:'b12', children:null } } }, b2:{ name:'b2', children:{ b21:{ name:'b21', children:null } } } } } } }
Die Der Code lautet wie folgt:
treelist.vue
<template> <p> <ul> <li > <span @click="isshow()">{{treelist.name}}</span> <tree v-for="item in treelist.children" v-if="isFolder" v-show="open" :treelist="item" :keys="item" ></tree> </li> </ul> </p> </template> <script> export default { name:'tree', props:['treelist'], data(){ return{ open:false } },computed:{ isFolder:function(){ return this.treelist.children } } ,methods:{ isshow(){ if (this.isFolder) { this.open =!this.open } } } } </script> <style lang="less"> </style>
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>树形图</title> </head> <body> <p id="app"> <tree :treelist="treeList"></tree> </p> </body> </html>
index.js
import Vue from 'vue'; import tree from '../components/treelist.vue' let all={ name:'all', children:{ A:{ name:'A', children:{ a1:{ name:'a1', children:{ a11:{ name:'a11', children:null }, a12:{ name:'a12', children:null } } }, a2:{ name:'a2', children:{ b21:{ name:'b21', children:null } } } } }, B:{ name:'B', children:{ b1:{ name:'b1', children:{ b11:{ name:'b11', children:null }, b12:{ name:'b12', children:null } } }, b2:{ name:'b2', children:{ b21:{ name:'b21', children:null } } } } } } } const app=new Vue({ el:"#app", components:{ 'tree':tree }, data:{ treeList:all } })
Nachdem ich die Fallstricke durchgesehen hatte, stellte ich fest, dass es einen ähnlichen Fall auf der offiziellen Website von Vue gibt, Link → Portal
Verweisen Sie auf die Methode auf der offiziellen Website. Schließlich habe ich versucht, sie umzusetzen
Der Unterschied zwischen dem Schreiben auf diese Weise und meiner Idee, als ich in die Falle trat, besteht darin, dass eine solche Komponente nur vorhanden ist Verantwortlich für ein Objekt, die Objekte in jedem Kind durchlaufen und die Komponenten einzeln verarbeiten, und mein erster Versuch bestand darin, die gesamten Kinder in sich selbst zu übergeben (Der Fehlerfall von (Bei Interesse schauen Sie sich bitte den ersten Versuch unten an.)
Solche Komponentenhandles. Welche Vorteile hat das Schreiben eines Objekts?
Ich kann den Schalter innerhalb der Komponente anpassen
Ich habe die Variable open in data definiert. Da die Komponente rekursiv ist, ist sie gleichbedeutend damit, dass jede Komponente ein eigenes open hat.
Dann Warum kann ich diese Methode nicht verwenden, wenn ich zum ersten Mal eine Grube betrete? Eine Komponente, die mehrere Objekte verarbeitet, entspricht einem Schalter, der alle Objekte in untergeordneten Objekten steuert alle Objekte derselben Ebene sollen erweitert werden
Untergeordnete Elemente durchlaufen und die Komponente selbst einzeln übergeben. Verwenden Sie v-show, um zu steuern, ob
<span @click="isshow()">{{treelist.name}}</span>
Erzielen Sie den Effekt
, wenn v-if wird hier nicht hinzugefügt Es wird zu einer Endlosschleife und wird weiterhin ausgeführt, daher müssen wir feststellen, ob das aktuell ausgeführte Objekt eine nächste Ebene hat Meine Daten wurden Hier etwas geändert, daher waren die ersten Daten, die ich übergeben habe, (index.html-Seite)
Aber die Seite bleibt unverändert, ganz zu schweigen von der Erweiterungsfunktion, auch undefiniert hat sich nicht geändert
Nach etwas Baidu habe ich festgestellt, dass Vue selbst keine direkten Änderungen an den von Props akzeptierten Werten mehr zulässt
Nach Vue2.0 können untergeordnete Komponenten den Wert des nicht mehr ändern übergeordnete Komponente, nur auf Änderungen reagieren über untergeordnete Komponente $emit(), übergeordnete Komponente $on()
Verwandte Empfehlungen:
Vue implementiert die Dynamics Refresh Echarts-Komponente
Das obige ist der detaillierte Inhalt vonVue implementiert die Datenfunktion zur Baumansicht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!