VUE遞歸樹形實(shí)現(xiàn)多級(jí)列表
本文實(shí)例為大家分享了VUE遞歸樹形實(shí)現(xiàn)多級(jí)列表,供大家參考,具體內(nèi)容如下
什么是遞歸?
簡(jiǎn)單來(lái)說(shuō)就是在組件中內(nèi)使用組件本身。
為什么要用遞歸?
如果出現(xiàn)很多下拉菜單,同級(jí),分級(jí)數(shù)據(jù),層級(jí)混雜,可以使用v-for的嵌套循環(huán)不就完事了。對(duì),沒毛病這樣的話也可以做,但是如果數(shù)據(jù)又多加了【很多】級(jí)分類呢;使用v-for也能實(shí)現(xiàn),但是代碼可能會(huì)比較雜或混亂!也不適合后期的維護(hù),這個(gè)時(shí)候呢,我們就可以使用我們所說(shuō)道的【遞歸組件 】了,使用遞歸組件,無(wú)論你的數(shù)據(jù)怎么增加我們都不用改動(dòng)我們的代碼。
先看效果:
1、創(chuàng)建兩個(gè)文件
父組件tree.vue 子組件tree-detail
父組件代碼:
<template> ? ? <div id="tree"> ? ? ? ? <treedetail ? ? ? ?:title="list.name"?? ?//把值傳給子組件 ? ? ? ?:list="list.children" //把值傳給子組件 ? ? ? ? :num='0' ? ? ? ? > ? ? ? ? </treedetail> ? ? </div> </template> <script> /** ?* 模擬一個(gè)樹形結(jié)構(gòu)圖 ?*/ const list = { ? name: "電子產(chǎn)品", ? children: [ ? ? { ? ? ? name: "電視", ? ? ? children: [ ? ? ? ? { ? ? ? ? ? name: "philips", ? ? ? ? ? children: [ ? ? ? ? ? ? { name: "philips-A" }, ? ? ? ? ? ? { name: "philips-B" }, ? ? ? ? ? ? { name: "philips-C" } ? ? ? ? ? ] ? ? ? ? }, ? ? ? ? { ? ? ? ? ? name: "Tcl", ? ? ? ? ? children: [ ? ? ? ? ? ? { name: "Mac Air" }, ? ? ? ? ? ? { name: "Mac Pro" }, ? ? ? ? ? ? { ? ? ? ? ? ? ? name: "ThinlPad", ? ? ? ? ? ? ? children: [ ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? name: "ThinlPad-A", ? ? ? ? ? ? ? ? ? children: [ ? ? ? ? ? ? ? ? ? ? { name: "ThinlPad-A-a" }, ? ? ? ? ? ? ? ? ? ? { name: "ThinlPad-A-b" }, ? ? ? ? ? ? ? ? ? ? { name: "ThinlPad-A-c" } ? ? ? ? ? ? ? ? ? ] ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? { name: "ThinlPad-B" }, ? ? ? ? ? ? ? ? { name: "ThinlPad-C" }, ? ? ? ? ? ? ? ? { name: "ThinlPad-D" } ? ? ? ? ? ? ? ] ? ? ? ? ? ? } ? ? ? ? ? ] ? ? ? ? }, ? ? ? ? { name: "海興" } ? ? ? ] ? ? }, ? ? { ? ? ? name: "電腦", ? ? ? children: [{ name: "acer" }, { name: "聯(lián)想" }, { name: "惠普" }] ? ? }, ? ? { ? ? ? name: "可穿戴的設(shè)備", ? ? ? children: [ ? ? ? ? { ? ? ? ? ? name: "手環(huán)", ? ? ? ? ? children: [ ? ? ? ? ? ? { name: "華為B5手環(huán)" }, ? ? ? ? ? ? { name: "小米手環(huán)" }, ? ? ? ? ? ? { name: "iphone手環(huán)" } ? ? ? ? ? ] ? ? ? ? } ? ? ? ] ? ? } ? ] }; import treedetail from '../tree/treedetail'? export default{ ? ? name:'tree', ? ? data(){ ? ? ? ? return{list} ? ? }, ? ? components:{treedetail} ?//注冊(cè)子組件 } </script>
子組件代碼:
<template> <div id="treedetail" > ? ? <div class="treedetail" @click="btn()" :style="indent"> ?//btn是用來(lái)切換顯示隱藏 ? ? ? ? <span>{{flag ? '-' :'+'}}</span>? ? ? ? ? <span>{{title}}</span> //接收到的標(biāo)題 ? ? ? ? </div> ? ? ? ?<div ?v-if="flag"> ?//這里加顯示隱藏也是必要的 ? ? ? ? <treedetail ?//treedetail這里的命名要跟父組件注冊(cè)子組件名稱一樣,不然無(wú)法顯示。DIV就無(wú)法顯示 ? ? ? ? v-for="(item,index) in list"? ? ? ? ? :key="index" ? ? ? ? :title="item.name" ? ? ? ? :list='item.children' ?//渲染列表下的列表數(shù)據(jù) ? ? ? ? :num='num + 1' //這里的作用應(yīng)該是分清層級(jí)。 ? ? ? ? ></treedetail> ? ? </div> ?? ?? ? ? </div> </template> <script> export default { ? ? name:'treedetail', ? ? props:{ ? ? ? ? title:{ ? ? ? ? ? ? type:String, ? ? ? ? ? ? default:'名稱' ? ? ? ? }, ? ? ? ? list:{type:Array}, ? ? ? ? num:{ ? ? ? ? ? ? type:Number, ? ? ? ? ? ? default:0 ? ? ? ? } ? ? }, ? ? data(){ ? ? ? ? return{ ? ? ? ? ? ? flag:false ? ? ? ? } ? ? }, ? ? methods:{ ? ? ? ? btn(){ ? ? ? ? ? ? this.flag=!this.flag ? ? ? ? } ? ? }, ? ? computed:{ ? ? ? ? indent(){ ? ? ? ? ? ? return `transform: translate(${this.num*20}px)`;? ? ? ? ?? ? ? ? ? ? ?? ? ? ? ? } ? ? } } </script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue如何通過(guò)id從列表頁(yè)跳轉(zhuǎn)到對(duì)應(yīng)的詳情頁(yè)
- vue實(shí)現(xiàn)循環(huán)滾動(dòng)列表
- 淺談vue的iview列表table render函數(shù)設(shè)置DOM屬性值的方法
- vue 列表頁(yè)跳轉(zhuǎn)詳情頁(yè)獲取id以及詳情頁(yè)通過(guò)id獲取數(shù)據(jù)
- vue主動(dòng)刷新頁(yè)面及列表數(shù)據(jù)刪除后的刷新實(shí)例
- Vue.js 遞歸組件實(shí)現(xiàn)樹形菜單(實(shí)例分享)
- vuejs使用遞歸組件實(shí)現(xiàn)樹形目錄的方法
- 用 Vue.js 遞歸組件實(shí)現(xiàn)可折疊的樹形菜單(demo)
- Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例
- Vue2遞歸組件實(shí)現(xiàn)樹形菜單
相關(guān)文章
在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果
這篇文章主要介紹了在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11element表格翻頁(yè)第2頁(yè)從1開始編號(hào)(后端從0開始分頁(yè))
這篇文章主要介紹了element表格翻頁(yè)第2頁(yè)從1開始編號(hào)(后端從0開始分頁(yè)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12vue頁(yè)面設(shè)置滾動(dòng)失敗的完美解決方案(scrollTop一直為0)
這篇文章主要介紹了vue頁(yè)面設(shè)置滾動(dòng)失敗的解決方案(scrollTop一直為0),本文通過(guò)場(chǎng)景分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05vue如何使用mapbox對(duì)當(dāng)前行政區(qū)劃進(jìn)行反選遮罩
這篇文章主要介紹了vue如何使用mapbox對(duì)當(dāng)前行政區(qū)劃進(jìn)行反選遮罩問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vuex state中的數(shù)組變化監(jiān)聽實(shí)例
今天小編就為大家分享一篇vuex state中的數(shù)組變化監(jiān)聽實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11