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

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

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

业务背景: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♪(・ω・)ノ

### 如何在 Element UI 的 `el-table` 组件中实现动态生成表格 为了实现在 Element UI 中通过 `el-table` 动态生成表格的功能,可以采用 JavaScriptVue.js 来定义数据结构并绑定到模板上。以下是具体的实现方法: #### 数据准备 首先需要准备好表头的数据源以及对应的表格内容数据。可以通过数组的形式来表示每一的信息。 ```javascript // 定义动态配置 const columns = [ { prop: 'date', label: '日期', width: '180px' }, { prop: 'name', label: '姓名', width: '180px' }, { prop: 'address', label: '地址', width: 'auto' } ]; // 表格数据 const tableData = [ { date: '2023-09-01', name: '张三', address: '北京市朝阳区' }, { date: '2023-09-02', name: '李四', address: '上海市浦东新区' }, ]; ``` 上述代码中的 `columns` 数组用于描述每的属性名称 (`prop`) 显示标签 (`label`),而 `tableData` 则存储实际的表格数据[^1]。 #### 模板编写 接着,在 HTML 部分利用 Vue.js 的 `v-for` 指令遍历这些,并将其映射至 `<el-table-column>` 标签之中。 ```html <template> <div> <!-- 使用 v-for 渲染动态 --> <el-table :data="tableData"> <el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label" :width="column.width" /> </el-table> </div> </template> <script> export default { data() { return { columns: [ { prop: 'date', label: '日期', width: '180px' }, { prop: 'name', label: '姓名', width: '180px' }, { prop: 'address', label: '地址', width: 'auto' } ], tableData: [ { date: '2023-09-01', name: '张三', address: '北京市朝阳区' }, { date: '2023-09-02', name: '李四', address: '上海市浦东新区' } ] }; } }; </script> ``` 此部分展示了如何基于已有的 `columns` `tableData` 进动态渲染。其中的关键在于使用了 Vue 提供的指令 `v-for` 对应于每一个表项创建了一个新的 `<el-table-column>` 元素[^2]。 #### 扩展功能——可拖拽排序 如果希望进一步增强用户体验,还可以引入插件使表格具备拖拽调整顺序的能力。例如借助第三方库 **element-ui-el-table-draggable** 实现这一目标。 安装依赖包之后修改原有组件如下所示: ```bash npm install git+https://gitcode.com/gh_mirrors/el/element-ui-el-table-draggable.git --save ``` 随后更新脚本逻辑加入拖放支持: ```javascript import draggable from 'vuedraggable'; export default { components: { draggable, }, methods: { onDragEnd(event) { console.log('拖动结束:', event); } } } ``` 最后将该为关联至视图层即可完成整个流程的设计[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值