element-ui 动态表头渲染表格

在ElementUI官方文档中,描述的动态渲染只是单纯的将已知字段名称的JSON数据通过prop属性填充到页面中,下为官方文档内容

<template>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="date" label="日期" width="180"></el-table-column>
      <el-table-column prop="name" label="姓名"  width="180"></el-table-column>
      <el-table-column prop="address" label="地址"></el-table-column>
    </el-table>
  </template>

  <script>
    export default {
      data() {
        return {
          tableData: [{
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1517 弄'
          }, {
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄'
          }, {
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1516 弄'
          }]
        }
      }
    }
  </script>

其中,表格的key值都是固定的。但是针对key值不固定的json数据的渲染,官方文档并未给出明确信息。最近在写项目的时候涉及到的一项需求就是把后台请求到的json数据渲染到页面,但key值并不固定,导致不能按照官方文档提出的方式进行直接渲染。

下面实例为如何根据数据数据schema来动态创建表格,其中header和data_list的数据可以通过后台获取,进而实现表格的动态创建

<template>
  <el-table :data="data_list">
     <el-table-column  :label="date" v-for="(date, key) in header">
             <template scope="scope">
                   {{data_list[scope.$index][key]}}
              </template>
       </el-table-column>
    </el-table>
  </template>
 <script>
      export default {
      data() {
            return {
                header:["column1","column2", "column3"],
                data_list:[
                    [1, 2, 3],
                    [4,5,6]
                ]
            }
        }
    }
 </script>
### 实现 Element-UI `el-table` 动态生成表头并垂直显示的方法 为了实现动态生成表头以及让表头文字垂直显示,可以结合 Vue.js 和 Element-UI 提供的相关属性和方法完成这一目标。 #### 1. **动态生成表头** 通过使用 `v-for` 循环遍历定义好的表头数组,可以在模板中动态渲染表头。以下是具体代码示例: ```vue <template> <el-table :data="tableData"> <!-- 动态生成表头 --> <el-table-column v-for="(header, index) in tableHeaders" :key="index" :prop="header.prop" :label="header.label" align="center" > </el-table-column> </el-table> </template> <script> export default { data() { return { tableHeaders: [ { prop: 'name', label: '姓名' }, { prop: 'age', label: '年龄' }, { prop: 'address', label: '地址' } ], tableData: [ { name: '张三', age: 28, address: '北京市朝阳区' }, { name: '李四', age: 30, address: '上海市浦东新区' } ] }; } }; </script> ``` 上述代码展示了如何利用 `v-for` 遍历 `tableHeaders` 数组来动态生成表头[^2]。 --- #### 2. **表头文字垂直显示** 要使表头的文字垂直显示,可以通过自定义样式或者覆盖默认样式的方式调整布局。以下是一个解决方案: ##### 自定义 CSS 样式 在 `<style>` 或全局样式文件中添加如下代码: ```css /* 垂直显示表头 */ .el-table th.is-leaf { writing-mode: vertical-lr; transform: rotate(-180deg); } ``` 该样式会将所有的表头单元格设置为垂直方向,并旋转 `-180°` 来达到正常阅读的效果。 ##### 结合 `class-name` 属性应用特定列的样式 如果只需要某些列的表头文字垂直显示,则可以通过 `class-name` 属性指定特定类名,并仅对该类名生效。例如: ```vue <template> <el-table :data="tableData"> <el-table-column v-for="(header, index) in tableHeaders" :key="index" :prop="header.prop" :label="header.label" align="center" :class-name="header.vertical ? 'vertical-header' : ''" ></el-table-column> </el-table> </template> <style> /* 定义垂直表头样式 */ .vertical-header .cell { writing-mode: vertical-lr; transform: rotate(-180deg); } </style> <script> export default { data() { return { tableHeaders: [ { prop: 'name', label: '姓名', vertical: false }, { prop: 'age', label: '年龄', vertical: true }, { prop: 'address', label: '地址', vertical: false } ], tableData: [ { name: '张三', age: 28, address: '北京市朝阳区' }, { name: '李四', age: 30, address: '上海市浦东新区' } ] }; } }; </script> ``` 在此例子中,只有设置了 `vertical: true` 的列才会应用垂直显示效果[^1]。 --- ### 总结 以上方案分别解决了两个核心问题:一是通过 `v-for` 动态生成表头;二是借助 CSS 调整表头文字的方向使其垂直显示。两者结合起来即可满足需求。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值