vue element 实现table的自动添加列

本文介绍了如何在Vue.js应用中实现动态表格渲染,包括从后端获取数据,设置表格列头,以及渲染表格内容。同时,针对v-if与v-for的使用进行了优化建议,避免在同一个元素上同时使用,以提高性能。

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

前提

由于每个同学的考试的科目可能不一样,但是老师统计的时候需要获取到每个同学的科目分数。结果如下
在这里插入图片描述
后端返回的数据格式如下

[{"id":1,"sid":"11","username":"小明","password":"123","sex":"女","yuanxi":"计算机学院","banji":"161","realname":"学生","score":[{"id":null,"sid":"11","kemu":"科目一","score":" 98","user":null},{"id":null,"sid":"11","kemu":"科目二","score":"97","user":null},{"id":null,"sid":"11","kemu":"计算机基础","score":"85","user":null}]},{"id":5,"sid":"12","username":"小白","password":"123","sex":"女","yuanxi":"计算机学院","banji":"162","realname":"学生","score":[{"id":null,"sid":"12","kemu":"科目一","score":"70","user":null}]}]

返回的是每位同学的个人信息 在score里面有每个同学科目分数
在这里插入图片描述

实现

1 data区域定义一个head 数组

data() {
    return {
      //动态列头header
      header:[]
    };
  },

2 设置表格的 :render-header

<el-table :data="cglist" border stripe style="width: 100% " :render-header="labelHead" >

3 写render-header的回调函数。请忽略下面的注释,但是,返回值必须是要h(‘span’,)这个格式的,关于这个函数的具体研究可以参考这里 https://segmentfault.com/a/1190000016364550,查看vue的官方文档

 labelHead(h,{column,index}){ //动态表头渲染
      //let l = column.label.length;
      //let f = 12; //每个字大小,其实是每个字的比例值,大概会比字体大小打差不多大
      //column.minWidth = f * l; //字大小乘个数即长度 ,注意不要加px像素,这里minWidth只是一个比例值,不是真正的长度
      //然后将列标题放在一个div块中,注意块的宽度一定要100%,否则表格显示不完全
      return h('span',{class:'table-head',style:{width:'100%'}},[column.label])
    },

4.在你需要header的方法里把后台返回的数据填充到header里。
在这里插入图片描述
5在需要生成动态列的地方遍历header数组,生成列。同时在行内遍历与表头具有对应关系的另一个数据填充列表。在index相等的时候将数据填充到对应的列下

  <el-table-column :label="item" v-for="(item, index) in header" :key="index"  align="center">
            <template slot-scope="scope">
                <span v-for="(item2,index2) in scope.row.score" :key="index2"  v-if="index2 == index"> {{ scope.row.score[index2].score }} </span>
            </template>
          </el-table-column>

最终效果

在这里插入图片描述

优化

当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中
所以,不推荐v-if和v-for同时使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gis_KG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值