el-table表格动态渲染行和列

文章介绍了如何在Vue项目中使用ElementUI的el-table组件实现根据返回数据动态渲染行和列,包括单个单元格和多个单元格的示例代码,并强调了数据结构处理的重要性。
摘要由CSDN通过智能技术生成

业务背景:el-table根据返回的数据动态渲染行和列

话不多说,上码,复制粘贴直接使用

关键点:
以如下代码为例:
1、动态渲染行列只需要一个 el-table-column 标签即可

2、必须有两个数组,分别代表列数组(colData)和行数组(rowData)

3、行下标:scope.$index; 列下标: index

一.每个单元格只有一项,不需要循环

效果:
在这里插入图片描述

完整代码:

<template>
  <div class>
    <el-table
      :data="rowData"
      border
      style="width: 100%">
      <el-table-column v-for="(item,index) in colData" :key="item.id" align="center">
        <template slot="header">
          <div>{{ item.label }}</div>
        </template>
        <template slot-scope="scope">
          <span v-if="index == 0">
            {{ scope.row.date }}
          </span>
          <span v-if="index > 0">
            {{ scope.row[item.type] }}
          </span>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  data () {
    return {
      colData: [
        {
          id: 1,
          label: '日期/餐型'
        },
        {
          id: 2,
          label: '早餐',
          type: 'BREAKFAST',
        },
        {
          id: 3,
          label: '午餐',
          type: 'LUNCH',
        },
        {
          id: 4,
          label: '晚餐',
          type: 'DINNER',
        },
      ],
      rowData: [{
        date: '周一',
        BREAKFAST: '苹果',
        LUNCH: '白菜',
        DINNER: "大米粥"
      }, {
        date: '周二',
        BREAKFAST: '香蕉',
        LUNCH: '土豆',
        DINNER: "南瓜粥"
      }, {
        date: '周三',
        BREAKFAST: '哈密瓜',
        LUNCH: '西葫芦',
        DINNER: "小米粥"
      }],
    }
  },
}
</script>
二.每个单元格有多项,需要循环

效果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fc26fb0921184861a2713fb1cbd7602e.png

完整代码:

<template>
  <div class>
    <el-table
      :data="rowData"
      border
      header-cell-class-name="table-header"
      style="width: 100%"
    >
      <el-table-column
        v-for="(item, index) in colData"
        :key="item.id"
        align="center"
      >
        <template slot="header">
          <div>{{ item.label }}</div>
        </template>
        <template slot-scope="scope">
          <div v-if="index == 0">
            {{ scope.row.date }}
          </div>
          <div v-if="index > 0">
            <div v-for="ele in scope.row[item.type]" :key="ele.id">
              {{ ele.name }}
            </div>
          </div>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      colData: [
        {
          id: 1,
          label: "日期/餐型",
        },
        {
          id: 2,
          label: "早餐",
          type: "BREAKFAST",
        },
        {
          id: 3,
          label: "午餐",
          type: "LUNCH",
        },
        {
          id: 4,
          label: "晚餐",
          type: "DINNER",
        },
      ],
      rowData: [
        {
          date: "周一",
          BREAKFAST: [
            {
              id: 1,
              name: "杨梅",
            },
            {
              id: 2,
              name: "荔枝",
            },
            {
              id: 3,
              name: "凤梨",
            },
          ],
          LUNCH: [
            {
              id: 1,
              name: "彩椒",
            },
            {
              id: 2,
              name: "韭菜",
            },
          ],
          DINNER: [
            {
              id: 1,
              name: "大米粥",
            },
          ],
        },
        {
          date: "周二",
          BREAKFAST: [
            {
              id: 1,
              name: "百香果",
            },
          ],
          LUNCH: [
            {
              id: 1,
              name: "胡萝卜",
            },
            {
              id: 2,
              name: "西兰花",
            },
          ],
          DINNER: [
            {
              id: 1,
              name: "番茄鸡蛋粥",
            },
            {
              id: 2,
              name: "排骨芋头粥",
            },
            {
              id: 3,
              name: "窝蛋肉丝粥",
            },
          ],
        },
      ],
    };
  },
};
</script>

注意:数据结构需要自己处理成符合table规则的

如果对你有帮助,赏个三连呗🙇‍🙇‍,不胜感激Thanks♪(・ω・)ノ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值