vue el-table实现递归嵌套的示例代码


Posted in Vue.js onAugust 14, 2022

说明: el-table有一个表格一级数据和二级数据显示的是一样的,像这种就可以用递归实现。
数据结构是这样子的:

tableData:[{
	name: "Lucy",
	age: 18,
	mobile: "11111111111",
	type: 1,
	friends:[{
		name: "Lucy-friend1",
		age: 16,
		mobile: "11111111111"
	},{
		name: "Lucy-friend2",
		age: 16,
		mobile: "11111111111"
	}]
}]

像以上这种数据结构想要如下图一样显示:

vue el-table实现递归嵌套的示例代码

我用的是el-table组件,所以单独建了一个组件用于表格递归显示。regionTableTemplate里expend中用到的递归显示二级数据
代码如下:

<template>
    <el-table :data="tableData" class="table-sub" ref="regionTable" :show-header="showHeader" :row-class-name="isShowExpend">
        <el-table-column type="expand">
            <template slot-scope="scope">
                <template v-if="scope.row.friends">
                    <regionTableTemplate class="in-table" :tableData="scope.row.friends" :showHeader="false"></regionTableTemplate>
                </template>
            </template>
        </el-table-column>
        <el-table-column prop="name" label="姓名"></el-table-column>
        <el-table-column prop="age" label="年龄"></el-table-column>
        <el-table-column prop="mobile" label="手机号"></el-table-column>
        <el-table-column label="操作" width="220">
            <template slot-scope="scope">
                <el-button type="text">详情</el-button>
                <el-button type="text"> 创建可用区</el-button>
                <el-button :disabled="scope.row.type === 1?true:false" type="text">删除</el-button>
            </template>
        </el-table-column>
    </el-table>
</template>

<script>
export default {
    name: "regionTableTemplate",
    props:{
        tableData: Array,
        showHeader: Boolean
    },
    methods:{
        //展开行  用于没有friends数组即没有子数据
        isShowExpend(row, index) {
            if (row.row.friends&&row.row.friends) {
                return ''
            } else {
                return 'hide-expand'
            }
        }
    }
}
</script>

<style>

</style>

父组件调用

<template>
    <div id="ops-region-wrapper">
        <div class="ops-list-wrapper">
            <table-vue :tableData="tableData" :showHeader="true" @showRegionFlag="showRegionFlag" @showDelDialog="showDelDialog"></table-vue>
            <Pager :pages='pages' @changeCurrent='changeCurrent'></Pager>
        </div>
    </div>
</template>

<script>
import Pager from '@/components/Pager.vue';
import tableVue from './components/table.vue';
export default {
    components:{
        Pager,
        tableVue
    },
    data() {
        return {
            tableData: [{
				name: "Lucy",
				age: 18,
				mobile: "11111111111",
				type: 1,
				friends:[{
					name: "Lucy-friend1",
					age: 16,
					mobile: "11111111111"
				},{
					name: "Lucy-friend2",
					age: 16,
					mobile: "11111111111"
				}]
			}],
            pages: {//分页
                showItem: 15,
                total: 0,
                currentPage: 1
            },
        }
    },
    methods: {
        //分页
        changeCurrent(val) {
            this.pages.currentPage = val;
        }
    },
    mounted() {
        this.getList();
    }
}
</script>

<style lang="scss">
#ops-region-wrapper{
    .el-table {
        margin-top: 15px;
        tr .el-table__expanded-cell {
            padding: 0;
            border-bottom: none;
        }
        .el-table__expand-icon {
            width: 18px;
            height: 18px;
            line-height: 16px;
            background: rgba(54, 134, 255, 0.2);
            color: #3686ff;
            border: 1px solid #3686FF;
            box-sizing: border-box;
            border-radius: 50%;
            transform: scale(0.8);
            i {
                font-weight: bold;
                font-size: 12px;
                left: 48%;
            }
        }
        .el-table__expand-icon--expanded{
            transform: rotate(90deg) scale(0.8);
        }
        .hide-expand .el-table__expand-column>.cell {
            display: none;
        }
    }
    .in-table{
        &::before{
            border: none;
        }
        margin: 0;
        padding: 0;
        .el-table__expand-column>.cell,.el-table__expanded-cell {
            display: none;
        }
    }
    .el-button--text {
        margin: 0 20px 0 0;
        @include pageFont(12px, #006EFF, 400, "PingFangSC-Regular, PingFang SC", 17px);
        &.is-disabled{
            color: #979797;
        }
    }
    .is-click {
        cursor: pointer;
        text-decoration: underline;
        text-decoration-color: #3686FF;
        @include pageFont(12px, #3686FF, 400, "PingFangSC-Regular, PingFang SC", 17px);
    }
}
</style>

到此这篇关于vue el-table实现递归嵌套的示例代码的文章就介绍到这了,更多相关vue el-table递归嵌套内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
vue 在服务器端直接修改请求的接口地址
Dec 19 Vue.js
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
vue-router懒加载的3种方式汇总
Feb 28 Vue.js
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 Vue.js
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 #Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 #Vue.js
Vue深入理解插槽slot的使用
Aug 05 #Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 #Vue.js
vue递归实现树形组件
Jul 15 #Vue.js
VUE递归树形实现多级列表
Jul 15 #Vue.js
Vue2项目中对百度地图的封装使用详解
You might like
php cc攻击代码与防范方法
2012/10/18 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
Vue2路由动画效果的实现代码
2017/07/10 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
小程序新版订阅消息模板消息
2019/12/31 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
Python动态加载模块的3种方法
2014/11/22 Python
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
matplotlib更改窗口图标的方法示例
2021/02/03 Python
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
制药工程专业个人求职自荐信
2014/01/25 职场文书
教师岗位聘任书范文
2014/03/29 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
离婚协议书的范本
2015/01/27 职场文书
停水通知
2015/04/16 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
pytorch显存一直变大的解决方案
2021/04/08 Python
MySQL Shell的介绍以及安装
2021/04/24 MySQL
mysql sock 文件解析及作用讲解
2022/07/15 MySQL