Element的table组件动态表头,展示复杂数据

问题描述

问题来自于后端希望我根据她返回的数据结构展示列表信息;
数据结构如下两张图:

  • 条目列表,包含条目Key(entry_key)和条目值列表(entry_value_list)
    用于展示的主要列表

  • 语言列表, language_list
    辅助列表

  • 需要根据entry_value_list和language_list列表的相同字段language_code,决定表头language_name和内容entry_value的展示.

实现方式

  • 获取语言列表language_list,for循环el-table-column
  • 使用表头插槽展示所有language_name
  • 循环条目值列表entry_value_list, 展示language_code相等的entry_value
 <el-table-column
        v-for="code in language_list.options"
        :key="code"
        align="center"
      >
        <template slot="header">
          {{ code.language_name }}
        </template>
        <template slot-scope="scope">
          <span v-for="value in scope.row.entry_value_list" :key="value">
            {{
              value.language_code === code.language_code
                ? value.entry_value
                : ""
            }}
          </span>
        </template>
      </el-table-column>


### Element UI Table 多级表头数据格式示例 在使用 Element UI 的 `el-table` 组件实现多级表头时,数据格式的设计至关重要。通常,多级表头的实现需要结合嵌套的 `el-table-column` 标签来定义表头结构。以下是关于如何设计和实现多级表头数据格式的详细说明。 #### 1. 表头数据结构 为了动态生成多级表头,通常会定义一个包含层级关系的对象数组作为表头数据。以下是一个常见的数据结构示例: ```javascript const tableHeader = [ { label: '房型名称', // 一级表头 children: [ // 二级表头 { prop: 'livePerson0', label: '入住人数' }, { prop: 'roomNumber0', label: '客房数量' }, { prop: 'liveDays0', label: '入住天数' } ] }, { label: '大床房元/间', // 一级表头 children: [ // 二级表头 { prop: 'livePerson1', label: '入住人数' }, { prop: 'roomNumber1', label: '客房数量' }, { prop: 'liveDays1', label: '入住天数' } ] } ]; ``` 上述数据结构中,每个对象代表一个一级表头,其 `children` 属性则定义了对应的二级表头[^5]。 #### 2. 动态渲染多级表头 通过 Vue 的 `v-for` 指令可以动态渲染多级表头。以下是一个完整的代码示例: ```vue <template> <div class="my-table"> <el-table :data="tableData" style="width: 100%"> <!-- 一级表头 --> <el-table-column v-for="(item, index) in tableHeader" :key="index" :label="item.label"> <!-- 二级表头 --> <el-table-column v-for="(child, childIndex) in item.children" :key="childIndex" :prop="child.prop" :label="child.label" /> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { tableHeader: [ { label: '房型名称', children: [ { prop: 'livePerson0', label: '入住人数' }, { prop: 'roomNumber0', label: '客房数量' }, { prop: 'liveDays0', label: '入住天数' } ] }, { label: '大床房元/间', children: [ { prop: 'livePerson1', label: '入住人数' }, { prop: 'roomNumber1', label: '客房数量' }, { prop: 'liveDays1', label: '入住天数' } ] } ], tableData: [ { livePerson0: 2, roomNumber0: 1, liveDays0: 3, livePerson1: 1, roomNumber1: 2, liveDays1: 4 }, { livePerson0: 3, roomNumber0: 2, liveDays0: 2, livePerson1: 2, roomNumber1: 1, liveDays1: 5 } ] }; } }; </script> ``` #### 3. 样式调整 在某些情况下,多级表头可能需要额外的样式调整以确保显示效果正常。例如,当存在固定列时,可以通过覆盖默认样式来避免空白问题: ```css <style lang="less" scoped> .table { /deep/.el-table__cell.is-hidden > * { visibility: visible; } } </style> ``` 此样式调整适用于多级表头与固定列结合使用的场景[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值