element-plus嵌套表格

1,646 阅读1分钟

嵌套表格很常用,但是官网的嵌套表格有个问题,就是子表格的每一项内容必须和父表格一样,没法自定义。具体事例官网上有,地址:element-plus.gitee.io/zh-CN/compo…

那怎么样实现一个嵌套任意自定义的子表格呢。后来考虑了一下使用展开行勉强可以实现功能,但是有个缺点就是会在每一行都生成一个子表格,没有就是空数据表格。

这是一个三级嵌套,代码如下:

<template>    <div>        <el-table :data="[            {                date: '100万',                name: 'Tom',                state: 'California',                city: 'San Francisco',                address: '3650 21st St, San Francisco',                zip: 'CA 94114',                family: [                    {                        name: 'Jerry',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                    },                    {                        name: 'Spike',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                    },                    {                        name: 'Tyke',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                    },                ],            },            {                date: '100万',                name: 'Tom',                state: 'California',                city: 'San Francisco',                address: '3650 21st St, San Francisco',                zip: 'CA 94114',                family: [                    {                        name: 'Jerry',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                        family: [                            {                                name: 'Jerry',                                state: 'California',                                city: 'San Francisco',                                address: '3650 21st St, San Francisco',                                zip: 'CA 94114',                            },                            {                                name: 'Spike',                                state: 'California',                                city: 'San Francisco',                                address: '3650 21st St, San Francisco',                                zip: 'CA 94114',                            },                            {                                name: 'Tyke',                                state: 'California',                                city: 'San Francisco',                                address: '3650 21st St, San Francisco',                                zip: 'CA 94114',                            },                        ],                    },                    {                        name: 'Spike',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                    },                    {                        name: 'Tyke',                        state: 'California',                        city: 'San Francisco',                        address: '3650 21st St, San Francisco',                        zip: 'CA 94114',                    },                ],            },        ]" style="width: 100%" :show-header="false" :row-style="{ backgroundColor: 'yellow' }"            class="my-cell-name221">            <el-table-column label="Name" prop="name" align="center" />            <el-table-column label="Date" prop="date" align="right" />            <el-table-column type="expand">                <template #default="props">                    <div>                        <el-table :data="props.row.family" class="my-cell-name222">                            <el-table-column label="Name" prop="name" />                            <el-table-column label="State" prop="state" />                            <el-table-column label="City" prop="city" />                            <el-table-column type="expand" label=" ">                                <template #default="props">                                    <div>                                        <el-table :data="props.row.family" :row-style="{ backgroundColor: 'yellowgreen' }"                                            :header-cell-style="{ backgroundColor: 'yellowgreen' }" class="my-cell-name223">                                            <el-table-column label="Name" prop="name" />                                            <el-table-column label="State" prop="state" />                                        </el-table>                                    </div>                                </template>                            </el-table-column>                            <el-table-column label="Address" prop="address" />                            <el-table-column label="Zip" prop="zip" />                        </el-table>                    </div>                </template>            </el-table-column>            <el-table-column label="Name" prop="name" align="center" />            <el-table-column label="Name" prop="name" align="center" />        </el-table>    </div></template><script lang="ts">import {    defineComponent,    onMounted,} from 'vue'import * as echarts from 'echarts';export default defineComponent({    setup(props) {    }})</script>

官网地址:element-plus.gitee.io/zh-CN/compo…

后来跟其他同事讨论其他实现方式,就是自定义表格的一行(有展开图标,显示隐藏通过是否有子数据判断),如果有子数据就在这行下边手动生成一个表格,通过图标控制变量控制显示隐藏,这样可以避免生成空表格。具体代码就不写了,实现起来很简单。