Element UI 动态生成多级表头(无线套娃)

本文介绍了如何在Vue项目中使用ElementUI将Table和Column封装成可复用的DynamicTable.vue和TableColumn.vue组件,实现动态生成多级表头,以及在模板中如何引用和使用这些组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、将Table和Column封装成两个组件

        封装两个组件,分别为DynamicTable.vue和TableColumn.vue,TableColumn.vue主要是使用递归来对表头进行循环生成DynamicTable.vue

DynamicTable.vue

<template>
    <el-table :data="tableData" border :height="height">
      <template v-for="item in tableHeader">
        <table-column v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></table-column>
        <el-table-column v-else :key="item.id" :label="item.label" :prop="item.prop"></el-table-column>
      </template>
    </el-table>
  </template>
  
  <script>
  import TableColumn from './TableColumn'
  export default {
    props: {
      // 表格的数据
      tableData: {
        type: Array,
        required: true
      },
      // 多级表头的数据
      tableHeader: {
        type: Array,
        required: true
      },
      // 表格的高度
      height: {
        type: String,
        default: '300'
      }
    },
    components: {
      TableColumn
    }
  }
  </script>
  
  <style scoped>
  
  </style>

TableColumn.vue

<template>
    <el-table-column :label="coloumnHeader.label" :prop="coloumnHeader.label">
      <template v-for="item in coloumnHeader.children">
        <tableColumn v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></tableColumn>
        <el-table-column v-else :key="item.name" :label="item.label" :prop="item.prop"></el-table-column>
      </template>
    </el-table-column>
  </template>
  
  <script>
  export default {
    name: 'tableColumn',
    props: {
      coloumnHeader: {
        type: Object,
        required: true
      }
    }
  }
  </script>
  
  <style scoped>
  
  </style>

二、使用

<template>
    <dynamic-table 
        :table-data="tableData" 
        :table-header="tableConfig" 
        v-if="dynamicTableShow"
    ></dynamic-table>
</template>
<script>
import DynamicTable from './components/DynamicTable'

export default {
    components: {
        DynamicTable
    },
    data() {
        return {
            tableData: [],
            tableConfig: [],
            dynamicTableShow: false
        }
    }
}
</script>

三、引用

虽然例子是好用的,但是根据版本情况应该修改的地方记得改。

引用来源:element UI实现动态生成多级表头 - DHeng - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值