VUE递归树形实现多级列表


Posted in Vue.js onJuly 15, 2022

本文实例为大家分享了VUE递归树形实现多级列表,供大家参考,具体内容如下

什么是递归?

简单来说就是在组件中内使用组件本身。

为什么要用递归?

如果出现很多下拉菜单,同级,分级数据,层级混杂,可以使用v-for的嵌套循环不就完事了。对,没毛病这样的话也可以做,但是如果数据又多加了【很多】级分类呢;使用v-for也能实现,但是代码可能会比较杂或混乱!也不适合后期的维护,这个时候呢,我们就可以使用我们所说道的【递归组件 】了,使用递归组件,无论你的数据怎么增加我们都不用改动我们的代码。

先看效果:

VUE递归树形实现多级列表

1、创建两个文件

父组件tree.vue 子组件tree-detail

父组件代码:

<template>
    <div id="tree">
        <treedetail
       :title="list.name"    //把值传给子组件
       :list="list.children" //把值传给子组件
        :num='0'
        >
        </treedetail>
    </div>
</template>
<script>

/**
 * 模拟一个树形结构图
 */
const list = {
  name: "电子产品",
  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: "联想" }, { name: "惠普" }]
    },
    {
      name: "可穿戴的设备",
      children: [
        {
          name: "手环",
          children: [
            { name: "华为B5手环" },
            { name: "小米手环" },
            { name: "iphone手环" }
          ]
        }
      ]
    }
  ]
};
import treedetail from '../tree/treedetail' 
export default{
    name:'tree',
    data(){
        return{list}
    },
    components:{treedetail}  //注册子组件
}
</script>

子组件代码:

<template>
<div id="treedetail" >
    <div class="treedetail" @click="btn()" :style="indent">  //btn是用来切换显示隐藏
        <span>{{flag ? '-' :'+'}}</span> 
        <span>{{title}}</span> //接收到的标题
        </div>  
     <div  v-if="flag">  //这里加显示隐藏也是必要的
        <treedetail  //treedetail这里的命名要跟父组件注册子组件名称一样,不然无法显示。DIV就无法显示
        v-for="(item,index) in list" 
        :key="index"
        :title="item.name"
        :list='item.children'  //渲染列表下的列表数据
        :num='num + 1' //这里的作用应该是分清层级。
        ></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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
详解Vue中的自定义指令
Dec 07 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
Vue2项目中对百度地图的封装使用详解
vue如何在data中引入图片的正确路径
Jun 05 #Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 05 #Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 #Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 #Vue.js
vue中data里面的数据相互使用方式
Jun 05 #Vue.js
Vue 打包后相对路径的引用问题
Jun 05 #Vue.js
You might like
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
酒店保安领班职务说明书
2014/03/04 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
计划生育宣传标语
2014/06/21 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
代领报检证委托书范本
2014/10/11 职场文书
计划生育汇报材料
2014/12/26 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
2015年底工作总结范文
2015/05/15 职场文书
用JS实现飞机大战小游戏
2021/06/09 Javascript