Element UI动态生成多级表头

1 基础常用的原型样例 

我们常常遇到的情况就是表头固定的,我们需要从后端获取对应表头的信息,如果信息比较多的时候为了方便我们展示,可以固定表头和列,下面是一个我们常见的例子:

固定列和表头可以同时使用,只需要将上述两个属性分别设置好即可。

  • 前端显示:

 

  • 代码实现
<template>
  <el-table
    :data="tableData3"
    style="width: 100%"
    height="250">
    <el-table-column
      fixed
      prop="date"
      label="日期"
      width="150">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="120">
    </el-table-column>
    <el-table-column
      prop="province"
      label="省份"
      width="120">
    </el-table-column>
    <el-table-column
      prop="city"
      label="市区"
      width="120">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址"
      width="300">
    </el-table-column>
    <el-table-column
      prop="zip"
      label="邮编"
      width="120">
    </el-table-column>
  </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableData3: [{
          date: '2016-05-03',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-04',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-01',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-08',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-06',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }, {
          date: '2016-05-07',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        }]
      }
    }
  }
</script>

2 应用场景分析

        由于项目的需求,需要根据用户自定义的方式来初始化表格的表头包含哪些信息,有很多信息是有规律的,所以我们需要Element UI动态生成多级表头。场景:

     

 层数是可变化的,所以需要专门设置一个表格的数据来保存表头,然后通过v-for="item in tableColData"的方式来循环展示表头,由于层数是循环展示表头的,所以如果层数里面如果有第二级别的表头,就需要在表头数据多设置一级children,加上第二层v-for="item1 in item.children"来遍历二级表头。

  • 前端展示

  • 代码实现
<template>
       <el-table
          :data="tableData9"
          :header-cell-style="{ 'text-align': 'center' }"
          :cell-style="{ 'text-align': 'center' }"
          style="width: 100%"
          max-height="500"
          @cell-mouse-enter="handleCellEnter"
          @cell-mouse-leave="handleCellLeave"
        >
        <el-table-column v-for="item in tableColData"
          :prop="item.id"
          :label="item.name"
          :key="item.id">
          <el-table-column v-for="item1 in item.children"
            :prop="item1.id"
            :label="item1.name"
            :key="item1.id">
          </el-table-column>
        </el-table-column>
          
         
        </el-table>
</template>

<script>
  export default {
    data() {
      return {
        tableColData: [{
          id: 'num',
          name: '序号'
        }, {
          id: 'class',
          name: '课程'
        }, {
          id: 'floor',
          name: '地下一层',
          children: [{
            id: 'numRoom',
            name: '间',
          },
          {
            id: 'areaOfUse',
            name: '使用面积',
          },
          {
            id: 'areaOfStru1',
            name: '建筑面积1',
          },
          {
            id: 'areaOfStru2',
            name: '建筑面积2',
          }]
        }, {
          id: 'floor',
          name: '地下一层',
          children: [{
            id: 'numRoom',
            name: '间',
          },
          {
            id: 'areaOfUse',
            name: '使用面积',
          },
          {
            id: 'areaOfStru1',
            name: '建筑面积1',
          },
          {
            id: 'areaOfStru2',
            name: '建筑面积2',
          }]
        }, {
          id: 'floor',
          name: '地下一层',
          children: [{
            id: 'numRoom',
            name: '间',
          },
          {
            id: 'areaOfUse',
            name: '使用面积',
          },
          {
            id: 'areaOfStru1',
            name: '建筑面积1',
          },
          {
            id: 'areaOfStru2',
            name: '建筑面积2',
          }]
        }, {
          id: 'floor',
          name: '地下一层',
          children: [{
            id: 'numRoom',
            name: '间',
          },
          {
            id: 'areaOfUse',
            name: '使用面积',
          },
          {
            id: 'areaOfStru1',
            name: '建筑面积1',
          },
          {
            id: 'areaOfStru2',
            name: '建筑面积2',
          }]
        }
      ],
      // 表内容
      tableData9: [{
        num: '1-1-1',
        class: '小学教室',
        AperRoom: '84',
        numRoom: '13',
        areaOfUse: '1092',
        areaOfStru1: "1985",
        areaOfStru2: "1985"
      }],
      
      }
    }
  }
</script>

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
可以通过动态生成表头的方式来实现根据后端返回数据动态渲染多级表头,具体的实现步骤如下: 1. 获取后端返回的表头数据,可以通过 API 接口获取。 2. 遍历表头数据,生成对应的列对象。可以使用 Element UI 表格组件中的 column 属性来实现。 3. 如果当前列对象有子列,那么递归生成子列对象。 4. 将生成的列对象数组作为表格组件的 columns 属性进行渲染。 以下是一个示例代码: ```vue <template> <el-table :data="tableData" :columns="tableColumns" border ></el-table> </template> <script> export default { data() { return { tableData: [], tableColumns: [], }; }, methods: { // 获取后端返回的表头数据 async fetchTableHeader() { const res = await fetch('/api/table/header'); const headerData = await res.json(); this.tableColumns = this.generateColumns(headerData); }, // 递归生成列对象 generateColumns(headerData) { return headerData.map((item) => { const column = { label: item.label, prop: item.prop, }; if (item.children && item.children.length) { column.children = this.generateColumns(item.children); } return column; }); }, // 获取后端返回的表格数据 async fetchTableData() { const res = await fetch('/api/table/data'); this.tableData = await res.json(); }, }, mounted() { this.fetchTableHeader(); this.fetchTableData(); }, }; </script> ``` 在这个示例代码中,通过 fetchTableHeader 方法获取后端返回的表头数据,并使用 generateColumns 方法生成对应的列对象,如果当前列对象有子列,那么会递归生成子列对象。最后将生成的列对象数组作为表格组件的 columns 属性进行渲染。 需要注意的是,由于表格数据是异步获取的,因此需要在获取表头数据和表格数据之后再进行渲染。在这个示例代码中,通过 mounted 钩子函数来依次调用 fetchTableHeader 和 fetchTableData 方法获取数据,并在获取数据完成后渲染表格组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值