el-table表格动态添加列。多组数据拼接和多层级数据的处理

提示:el-table表格动态添加列

文章目录

  • 前言
  • 一、多组数据拼接
  • 二、多层级处理
  • 三、实际应用中,为避免闪屏,可以表格数据统一渲染
  • 总结


前言

需求:富文本编辑器

一、多组数据拼接

<template>
  <div class="test">
    <el-table :data="tableData" stripe 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>
	    <template>
	      <el-table-column v-for="item,index in addHeadColumn" :prop="item.key" :label="item.label" :key="index"></el-table-column>
	    </template>  
    </el-table>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      tableData: [{
        id:1,
        date: '2016-05-02',
        name: '张三',
        address: '上海市普陀区金沙江路 1518 弄'
      }, {
        id:2,
        date: '2016-05-04',
        name: '李四',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        id:3,
        date: '2016-05-01',
        name: '王五',
        address: '上海市普陀区金沙江路 1519 弄'
      }, {
        id:4,
        date: '2016-05-03',
        name: '孙六',
        address: '上海市普陀区金沙江路 1516 弄'
      }],
      customTableData:[],
      userTableData:[],
      addHeadColumn:[],
    }
  },
  created(){
    this.getcustomTableData();
  },
  methods:{
    //获取自定义表头数据
    getcustomTableData(){
      this.addHeadColumn = [];
      this.customTableData = [];
      //模拟接口调用延时
      setTimeout(()=>{
        this.customTableData =[
          { id:1,name: '张三',age:16,gender:'女'},
          { id:2,name: '李四',age:27,gender:'男'},
          { id:3,name: '王五',age:38,gender:'男'},
          { id:4,name: '孙六',age:49,gender:'男'}
        ];
        this.userTableData =[
          { id:1,name: '张三',color:'green',hobby:'篮球'},
          { id:2,name: '李四',color:'red',hobby:'足球'},
          { id:3,name: '王五',color:'blue',hobby:'羽毛球'},
          { id:4,name: '孙六',color:'orange',hobby:'乒乓球'}
        ];
        this.addHeadColumn = [
          {key:'age',label:'年龄'},
          {key:'gender',label:'性别'},
          {key:'color',label:'幸运色'},
          {key:'hobby',label:'兴趣爱好'},
        ]
        //tableData为基础表格数据,定制表头并渲染数据到tableData里
        let newTableData = [];
        for(let i=0;i<this.tableData.length;i++){
          newTableData[i] = this.tableData[i]||{};
          for(let j=0;j<this.customTableData.length;j++){
            let customTableDataJ = this.customTableData[j]||{};
            //当表格数据id相同时  合并数据
            if(newTableData[i].id == customTableDataJ.id){
              let obj = {...newTableData[i],...customTableDataJ};
              newTableData[i] = obj;
            }
          }
          for(let k=0;k<this.userTableData.length;k++){
            let userTableDataK = this.userTableData[k]||{};
            //当表格数据id相同时  合并数据
            if(newTableData[i].id == userTableDataK.id){
              let obj = {...newTableData[i],...userTableDataK};
              newTableData[i] = obj;
            }
          }
        }
        this.tableData = newTableData;
      },5000);
    },
  }
}
</script>

在这里插入图片描述
在这里插入图片描述

二、多层级处理

<template>
  <div class="test">
    <el-table :data="tableData" stripe 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>
	    <template>
	      <el-table-column v-for="item,index in addHeadColumn" :prop="item.key+'Msg'" :label="item.label" :key="index"></el-table-column>
	    </template>  
	</el-table>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      tableData: [{
        id:1,
        date: '2016-05-02',
        name: '张三',
        address: '上海市普陀区金沙江路 1518 弄',
        msg:{age:16,gender:'女',color:'green',hobby:'篮球'}
      }, {
        id:2,
        date: '2016-05-04',
        name: '李四',
        address: '上海市普陀区金沙江路 1517 弄',
        msg:{age:27,gender:'男',color:'red',hobby:'足球'}
      }, {
        id:3,
        date: '2016-05-01',
        name: '王五',
        address: '上海市普陀区金沙江路 1519 弄',
        msg:{age:38,gender:'男',color:'blue',hobby:'羽毛球'}
      }, {
        id:4,
        date: '2016-05-03',
        name: '孙六',
        address: '上海市普陀区金沙江路 1516 弄',
        msg:{age:49,gender:'男',color:'orange',hobby:'乒乓球'}
      }],
      customTableData:[],
      userTableData:[],
      addHeadColumn:[],
    }
  },
  created(){
    this.getcustomTableData();
  },
  methods:{
    //获取自定义表头数据
    getcustomTableData(){
      this.addHeadColumn = [];
      this.customTableData = [];
      //模拟接口调用延时
      setTimeout(()=>{
        let matchObj = {age:'年龄',gender:'性别',color:'幸运色',hobby:'兴趣爱好'}
        let differenceStr = 'Msg';
        for(let i=0;i<this.tableData.length;i++){
          let msgObj = (this.tableData[i]||{}).msg||{};
          for(let key in msgObj){
            let obj = {key,label:matchObj[key]}
            let index = this.addHeadColumn.findIndex(item=>{return item.key == obj.key});
            if(index<0){this.addHeadColumn.push(obj)}
            //区分msg里字段与tableData[i]的字段有重复的,加个string区分,el-table-column的prop对应添加:prop="item.key+'Msg'"
            this.tableData[i][key+differenceStr] = msgObj[key];
          }
        }
      },5000);
    },
  }
}
</script>

在这里插入图片描述
在这里插入图片描述

三、实际应用中,为避免闪屏,可以表格数据统一渲染

<template>
  <div class="test">
    <el-table :data="tableData" stripe 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> -->
      <template>
        <el-table-column v-for="item,index in addHeadColumn" :prop="index>2?item.key+'Msg':item.key" :label="item.label" :key="index"></el-table-column>
      </template>  
    </el-table>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      tableData: [],
      customTableData:[],
      userTableData:[],
      addHeadColumn:[],
    }
  },
  created(){
    this.getcustomTableData();
  },
  methods:{
    //获取自定义表头数据
    getcustomTableData(){
      this.addHeadColumn = [];
      this.customTableData = [];
      this.addHeadColumn = [
        {key:'date',label:'日期'},
        {key:'name',label:'姓名'},
        {key:'address',label:'地址'},
        {key:'age',label:'年龄'},
        {key:'gender',label:'性别'},
        {key:'color',label:'幸运色'},
        {key:'hobby',label:'兴趣爱好'}
      ];
      let responseData = [
        {
          id:1,
          date: '2016-05-02',
          name: '张三',
          address: '上海市普陀区金沙江路 1518 弄',
          msg:{age:16,gender:'女',color:'green',hobby:'篮球'}
        }, {
          id:2,
          date: '2016-05-04',
          name: '李四',
          address: '上海市普陀区金沙江路 1517 弄',
          msg:{age:27,gender:'男',color:'red',hobby:'足球'}
        }, {
          id:3,
          date: '2016-05-01',
          name: '王五',
          address: '上海市普陀区金沙江路 1519 弄',
          msg:{age:38,gender:'男',color:'blue',hobby:'羽毛球'}
        }, {
          id:4,
          date: '2016-05-03',
          name: '孙六',
          address: '上海市普陀区金沙江路 1516 弄',
          msg:{age:49,gender:'男',color:'orange',hobby:'乒乓球'}
        }
      ];
      //模拟接口调用延时
      setTimeout(()=>{
        let differenceStr = 'Msg';
        for(let i=0;i<responseData.length;i++){
          let msgObj = (responseData[i]||{}).msg||{};
          for(let key in msgObj){
            responseData[i][key+differenceStr] = msgObj[key];
          }
        }
        this.tableData = responseData;
      },5000);
    },
  }
}
</script>

在这里插入图片描述
在这里插入图片描述

总结

踩坑路漫漫长@~@

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/291409.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WEB 3D技术 three.js 几何体uv属性讲解与基本演示

本文 我们来说说uv 那么 它是什么呢&#xff1f; 首先 比如 我们几何体 贴一个图 那么 为什么我们图的四个边就能正好贴到几何体的边 为什么不可以图就在几何体中间呢&#xff1f; 中心为什么能对齐 它就不能偏一点吗&#xff1f; 这是第一个问题 还有我们 gltf 这种文件 其实…

14:00面试,14:06就出来了,问的问题真的变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

分布式图文详解!

分布式理论 1. 说说CAP原则&#xff1f; CAP原则又称CAP定理&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;这3个基本…

springCould中的Hystrix【上】-从小白开始【7】

目录 1.简单介绍❤️❤️❤️ 2.主要功能 ❤️❤️❤️ 3.正确案例❤️❤️❤️ 4.使用jmeter压测 ❤️❤️❤️ 5.建模块 80❤️❤️❤️ 6.如何解决上面问题 ❤️❤️❤️ 7.对8001进行服务降级❤️❤️❤️ 8.对80进行服务降级 ❤️❤️❤️ 9.通用降级方法❤️❤️…

数据中台建设之路

数据中台是在政企数字化转型过程中&#xff0c;对各业务单元业务与数据的沉淀&#xff0c;构建包括数据技术、数据治理、数据运营等数据建设、管理、使用体系&#xff0c;实现数据赋能。数据中台&#xff0c;是新型信息化应用框架体系中的核心。 1、什么是数据中台 随着企业数…

被客户骂咋办?客服请看这些处理方式

客户骂人的常见类型 1.没来得及回复就辱骂 绝大多数客户都非常反感机器人自动回复。但人工回复需要一定的回复时间&#xff0c;如果自己打字速度不快&#xff0c;则建议搭配使用快捷回复软件(客服宝) 2.说我们服务态度不好 回复上可以多加一些感叹后缀词&#xff0c;如“好…

【GO语言卵细胞级别教程】01.GO基础知识

01.GO基础知识 目录 01.GO基础知识1.GO语言的发展历程2.发展历程3.Windowns安装4.VSCode配置5.基础语法5.1 第一段代码5.2 GO执行的流程5.3 语法规则5.4 代码风格5.5 学习网址 1.GO语言的发展历程 Go语言是谷歌公司于2007年开始开发的一种编程语言&#xff0c;由Robert Griese…

PTA——逆序的三位数

程序每次读入一个正3位数&#xff0c;然后输出按位逆序的数字。注意&#xff1a;当输入的数字含有结尾的0时&#xff0c;输出不应带有前导的0。比如输入700&#xff0c;输出应该是7。 输入格式&#xff1a; 每个测试是一个3位的正整数。 输出格式&#xff1a; 输出按位逆序…

洛谷P1024[NOIP2001 提高组] 一元三次方程求解(cpp)(二分查找)

目录 1.题目 2.思路 3.AC 1.题目 # [NOIP2001 提高组] 一元三次方程求解 ## 题目描述 有形如&#xff1a; 这样的一个一元三次方程。给出该方程中各项的系数&#xff08;a,b,c,d 均为实数&#xff09;&#xff0c;并约定该方程存在三个不同实根&#xff08;根的范围在 -…

【每日论文阅读】单目深度估计 近期进展

红外场景单目深度估计的难点 缺乏准确的深度参考标准&#xff1a;红外场景下的深度估计通常需要依赖于大量的输入图像和对应的深度值作为训练的约束。然而&#xff0c;获取准确的深度参考标准是一个挑战&#xff0c;目前常用的方法是使用红外传感器&#xff08;如Kinect&#…

熔断、隔离、重试、降级、超时、限流,高可用架构流量治理核心策略全掌握

可用性的定义 在探讨高可用架构之前&#xff0c;让我们以 O2 系统为例&#xff0c;解释一下何谓可用性。O2 是腾讯内部的一个广告投放系统&#xff0c;专注于提升投放效率、分析广告效果&#xff0c;拥有自动化广告投放、AIGC 自动化素材生产等多种功能。 其整体架构概览如下&…

prometheus grafana redis安装配置监控

文章目录 前传安装redis-exporterredis_exporter参数配置参考配置prometheus查看promethues redis job节点grafana配置外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说下监控nginx&#xff0c;promethe…

T40N 君正智能处理器T40 BGA 芯片

T40N是一款智能视频应用处理器&#xff0c;适用于移动摄像机、安防等视频设备调查、视频聊天、视频分析等。该SoC引入了一种创新的体系结构满足高性能计算和高质量图像和视频编码的要求通过视频设备解决。T40N提供高速CPU计算能力&#xff0c;出色的图像信号过程中&#xff0c;…

Linux第5步_测试虚拟机网络连接

安装好VMwareTools后&#xff0c;就可以测试虚拟机网络连接了&#xff0c;目的是实现虚拟机上网。 1、打开“控制面板”&#xff0c;得到下图&#xff1a; 2、双击“网络和 Internet” &#xff0c;得到下图&#xff1a; 3、双击“网络和共享中心” 4、点击“更改适配器设置”…

云消息队列 Kafka 版生态谈第一期:无代码转储能力介绍

作者&#xff1a;娜米 云消息队列 Kafka 版为什么需要做无代码转储 云消息队列 Kafka 版本身是一个分布式流处理平台&#xff0c;具有高吞吐量、低延迟和可扩展性等特性。它被广泛应用于实时数据处理和流式数据传输的场景。然而&#xff0c;为了将云消息队列 Kafka 版与其他数…

UG/NX许可证使用效率提升新技术

UG/NX许可证使用效率提升新技术 UG&#xff08;Unigraphics NX&#xff09;是Siemens PLM Software公司出品的一个产品工程解决方案&#xff0c;它为用户的产品设计及加工过程提供了数字化造型和验证手段。近年来随着国家对知识产品保护的不断加强&#xff0c;以前使用盗版软件…

protobuf使用

Protocol Buffer是google于2008推出的一种数据交换的格式&#xff0c;它独立于语言&#xff0c;独立于平台。 google 提供了多种语言的实现&#xff0c;每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式&#xff0c;比使用 xml 和 json 进行数据交换快…

Excel技巧之【如何修改密码】

我们知道&#xff0c;Excel可以设置多种密码来保护文件&#xff0c;那想要修改密码&#xff0c;要如何操作呢&#xff1f;下面小编来分享一下Excel常用的3种密码的修改方法&#xff0c;一起来看看吧&#xff01; 1. “打开密码” 想要修改Excel表格的“打开密码”&#xff0c…

网络安全|2024年需要重点关注的10种DNS攻击类型

目前&#xff0c;针对域名系统&#xff08;DNS&#xff09;的攻击已经成为企业组织数字化发展中的一个严重问题&#xff0c;每年都有数千个网站成为此类攻击的受害者。据最近的研究数据显示&#xff0c;2023年企业组织与DNS攻击相关的损失同比增加了49%&#xff0c;这些损失不仅…

行业模型与场景落地新样本,网易有道发布多款“子曰”教育大模型落地应用与产品

距离2023年7月正式发布教育大模型“子曰”不到半年时间&#xff0c;教育科技公司网易有道近日再次分享了“子曰”教育大模型创新和落地成果&#xff0c;宣布推出国内首个教育大模型“子曰”2.0版本&#xff0c;同时还发布了基于大模型研发的三大创新应用——AI家庭教师“小P老师…