Ant Design Vue 之a-tab单元格编辑

2023-11-08

前言

最近遇到一个需求,要求表格中某一属性是可以单独改变的。看了 Ant Design Vue 的官方组件,发现不太灵活,所以自己动手写了一下。

官方实现

先看一下官方demo演示效果

Snipaste_2021-04-27_14-51-41.png

发现只能整行编辑,不能单独针对某个属性进行单独编辑,例如只针对 name 或者 age 进行编辑。

手动调整

先看下效果

Snipaste_2021-04-27_15-04-32.png

在每列的后面增加了一个编辑icon ,点击后的效果如下

Snipaste_2021-04-27_15-06-31.png

整体效果如上图所示,此案例只展示了name

代码部分

<template>
  <a-table :columns='columns' :data-source='data' bordered>
    <template
      v-for="col in ['name']"
      :slot='col'
      slot-scope='text, record, index'
    >
      <div :key='col' style='float: left;margin-right: 0'>
        <a-input
          v-if='record.editable'
          style='margin: -5px 0'
          :value='text'
          @change='e => handleChange(e.target.value, record.key, col)'
        />
        <template v-else>
          {{ text }}
        </template>
      </div>
      <div style='float: right'>
           <span v-if='record.editable'>
             <a style='color: #2eabff;fontSize:15px;margin-left: 0;margin-right: 20px'  @click='() => save(record.key)' >确定</a>
          <a-popconfirm title='确认取消重命名?' @confirm='() => cancel(record.key)'>
            <a type='close' style='color: #2eabff;fontSize:15px' >取消</a>
          </a-popconfirm>
        </span>
        <span v-else>
          <a-icon style='color: #2eabff;fontSize:20px' type='edit'  :disabled="editingKey !== ''" @click='() => edit(record.key)' />
        </span>
      </div>
    </template>
  </a-table>
</template>
<script>
const columns = [
  {
    title: 'name',
    dataIndex: 'name',
    width: '25%',
    scopedSlots: { customRender: 'name' }
  },
  {
    title: 'age',
    dataIndex: 'age',
    width: '15%',
    scopedSlots: { customRender: 'age' }
  },
  {
    title: 'address',
    dataIndex: 'address',
    width: '40%',
    scopedSlots: { customRender: 'address' }
  },
  {
    title: 'operation',
    dataIndex: 'operation',
    scopedSlots: { customRender: 'operation' }
  }
]

const data = []
for (let i = 0; i < 100; i++) {
  data.push({
    key: i.toString(),
    name: `Edrward ${i}`,
    age: 32,
    address: `London Park no. ${i}`
  })
}
export default {
  data() {
    this.cacheData = data.map(item => ({ ...item }))
    return {
      data,
      columns,
      editingKey: ''
    }
  },
  methods: {
    handleChange(value, key, column) {
      const newData = [...this.data]
      const target = newData.filter(item => key === item.key)[0]
      if (target) {
        target[column] = value
        this.data = newData
      }
    },
    edit(key) {
      const newData = [...this.data]
      const target = newData.filter(item => key === item.key)[0]
      this.editingKey = key
      if (target) {
        target.editable = true
        this.data = newData
      }
    },
    save(key) {
      const newData = [...this.data]
      const newCacheData = [...this.cacheData]
      const target = newData.filter(item => key === item.key)[0]
      console.log("target:",JSON.stringify(target))
      const targetCache = newCacheData.filter(item => key === item.key)[0]
      if (target && targetCache) {
        delete target.editable
        this.data = newData
        Object.assign(targetCache, target)
        this.cacheData = newCacheData
      }
      this.editingKey = ''
    },
    cancel(key) {
      const newData = [...this.data]
      const target = newData.filter(item => key === item.key)[0]
      this.editingKey = ''
      if (target) {
        Object.assign(target, this.cacheData.filter(item => key === item.key)[0])
        delete target.editable
        this.data = newData
      }
    }
  }
}
</script>
<style scoped>

</style>

代码逻辑很简单,可以直接运行看下效果,如果想所有列都需编辑,扩充一下col ,定义一个变量,遍历需要编辑的列即可。例如

......伪代码.....
data() {
    return {
      editColumns:['name','age']//自行扩展即可
    }
  },

v-for="col in ['name'] 调整为 v-for="col in editColumns 即可。

总结

Ant Design Vue 本身组件还是十分强大的,但是不会总会和你的需求完美契合的,需要自己慢慢摸索,以上的效果可能不是很美观,本人后端程序员一枚,请勿见怪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant Design Vue 之a-tab单元格编辑 的相关文章

  • 手把手教你调用百度人脸识别API

    在百度AI开放平台使用百度的人脸识别能力 只需要三个核心步骤即可操作完成 获取接口权限 准备接口调用工具 进行接口调用 全部流程走通只需要十分钟时间 获取接口权限 获取接口权限是调用接口的前提 主要分为以下几步 1 进入百度云的人脸识别控制
  • Android开发——APP ANR治理

    一 背景介绍 ANR Application Not Response 指应用程序无响应 通常出现在主线程被阻塞时 并伴随ANR弹窗出现 ANR发生时要么关闭当前app 要么等待 然而等待的结果大概率还是继续ANR 最终需要杀掉应用进程 A
  • Java HashMap

    无知的我终于深入接触到了HashMap 如果有遇到有任何无法进展问题或者疑惑的地方 应该在讨论区留言 或者 其他途径以寻求及时的帮助 以加快学习效率 或者 培养独立解决问题的能力 扫清盲点 补充细节 目录 HashMap HashMap 机
  • go语言菜单树结构

    GO语言菜单树结构实现 Menu是数据库表映射 MenuTree是树结构菜单 目前只考虑2级菜单 后面附源码 亲测可用 package models import github com astaxie beego orm time type
  • Ecshop如何解决Deprecated: preg_replace()报错 (第二章)

    这些错误主要集中在 upload includes cls template php 文件中 1 line 300 原语句 return preg replace n e this gt select 1 KaTeX parse error
  • STM32引用“CmBacktrace”: ARM Cortex-M 系列 MCU 错误追踪库

    目录 概述 一 使用方法 0 CmBacktrace 是什么 1 为什么选择 CmBacktrace 2 CmBacktrace 如何使用 2 1 演示 2 2 Demo 2 3 移植说明 2 4 API 说明 2 5 常见问题 2 6 许
  • 【树莓派】error: command ‘/usr/bin/arm-linux-gnueabihf-gcc‘ failed with exit code 1(已解决)

    输入以下命令 export CFLAGS fcommon pip3 install RPi GPIO 参考网址 https askubuntu com questions 1290037 error while installing rpi
  • cpu与外设接口,cpu时序控制、电源时序控制(电源IC控制)

    目录 1 cpu与外设和存储器数据交换分别通过两种接口连接 I O接口和存储器接口 2 89C51单片机时钟电路和时序控制 3 CPU 指令周期 时序产生器和控制方式 重要 3 1 时序控制方式 4 使用通用电源IC实现电源时序控制的电路
  • PIP环境复制之requirements.txt

    1 requirements txt介绍 requirements txt顾名思义 程序的依赖 即一个项目所需要的依赖包列表 在项目平移的时候 或者程序所需要的环境过多 而不至于频繁的PIP requirements txt给此工作提供了方
  • 使用function_requires的Boost概念测试程序

    使用function requires的Boost概念测试程序 Boost是一个非常受欢迎的C 库集合 它为开发人员提供了许多实用的工具和库 以增强C 的功能和性能 其中之一是function requires概念 它可以用于在编译时检查函
  • 手把手带你撸zookeeper源码-客户端如何发送数据到zk集群服务端的

    接上篇文章继续分析 手把手带你撸zookeeper源码 zookeeper客户端如何和zk集群创建连接 上篇文章我们分析到了org apache zookeeper ClientCnxn SendThread primeConnection

随机推荐

  • 机器学习--PCA(主成分分析)原理及应用

    众所周知PCA是有效的降维方法 当你的特征非常多维度非常大的时候 为了使机器学习的算法在计算或是训练的时候有更高的效率 通常会进行降维处理 将一个具有m个数据n维的数据降为k维的数据 方法如下 算出一个sigma矩阵 x i 为n 1的矩阵
  • dmg文件 linux,安装和使用Dmg2Img在Linux上创建macOS安装盘

    本文介绍安装和使用Dmg2Img的方法 以在Linux操作系统上创建macOS安装盘 在Linux中安装Dmg2Img 在能够创建新的安装映像之前 必须在计算机上安装Dmg2Img应用程序 Dmg2Img能在众多主流Linux发行版中安装
  • Keil5调试代码时关于警告及错误信息的处理

    图一 Warning 图二 NoWarning Keil中出现warning 160 D unrecognized pragma这样的错误怎么解决 答 每一种开发环境支持的 pragma是不一样的 不支持的就不能用了 例如图一中的messa
  • 安装ubuntu分区设置

    一般来说 在linux系统中都有最少两个挂载点 分别是 根目录 及 swap 交换分区 其中 是必须的 一般来说我们最少需要两个分区 需要一个SWAP分区 和一个 分区 但把一些常用 重要的挂载点分到其它分区 这样便于管理 一般一个 分区
  • 对faster rcnn的一些修改

    在network py中修改anchor scales 第262行 def create architecture self sess mode num classes tag None anchor scales 8 16 32 anch
  • Linux中FTP传输协议

    目录 一 ftp的简介 实验一 匿名传输 1 配置文件 etc vsftpd vsftpd conf 2 在 var ftp pub中新建文件并写数据 3 在cmd中连接虚拟机 4 向真机发送文件 5 向虚拟机发送文件 实验二 禁止任意用户
  • c语言简易密码本爆破

    代码如下 实现原理比较简单 通过读取txt文件密码本与内置好的密码口令进行对比 密码本可以在网页上找 也可以用这个密码字典下载 弱口令字典下载 密码字典 迷你下载站为大家分享这个弱口令字典文件 它列出了多款规则的密码 有需要的大神们可以参考
  • 485、CAN、单总线、SPI、I2C的概念,特点,协议,使用方法及通信方式,还有它们之间的区别

    一 概念 1 485 485 一般称作 RS485 EIA 485 是隶属于 OSI 模型物理层的电气特性规定为 2 线 半双工 多点通信的标准 它的电气特性和 RS 232 大不一样 用缆线两端的电压差值来表示传递信号 2 CAN CAN
  • C#中变量的类型

    文章目录 值类型 引用类型 值类型与引用类型的区别 枚举类型 变量的作用域 值类型 C 中值类型的变量主要包括整数类型 浮点类型 decimal和bool类型等 值类型的变量都在堆栈中进行分配 因此效率很高 所以使用值类型的主要目的是为了提
  • (IDEA)创建Java类时,自动生成作者、时间和版本号注释;以及方法注释时,自动生成参数和返回值注释

    可恢复 IDEA 创建Java类时 自动生成作者 时间和版本号注释 以及方法注释时 自动生成参数和返回值注释 1 作者 时间和版本号注释 2 方法注释 自动生成方法中参数和返回值 IDEA 创建Java类时 自动生成作者 时间和版本号注释
  • 【iVX】颠覆常规,首个图形通用无代码编程平台诞生

    个人主页 个人主页 新人博主 喜欢就关注一下呗 文章目录 关于传统 低代码平台 我的看法 低代码平台的 局限性 传统的 低代码平台 存在以下一些缺点 关于iVX 为什么选择iVX 1 可视化的操作自动生成 全栈代码 2 超强的代码能力 3
  • Linux I2C 驱动实验

    目录 Linux I2C 驱动框架简介 I2C 总线驱动 I2C 设备驱动 I2C 设备和驱动匹配过程 I MX6U 的I2C 适配器驱动分析 I2C 设备驱动编写流程 I2C 设备信息描述 I2C 设备数据收发处理流程 硬件原理图分析 实
  • 计算机操作系统知识架构整理

    计算机操作系统 操作系统引论 操作系统的目标与应用 操作系统的目标 操作系统的作用 推动操作系统发展的主要动力 操作系统的发展过程 无操作系统的计算机系统 单道批处理系统 多道批处理系统 分时系统 实时系统 微机操作系统的发展 操作系统的基
  • 【剑指offer】数据结构——队列 栈 堆

    目录 数据结构 树 剑指offer 09 用两个栈实现队列 剑指offer 30 包含min函数的栈 剑指offer 31 栈的压入 弹出序列 剑指offer 41 数据流中的中位数 剑指offer 59 2 队列的最大值 数据结构 树 剑
  • Ubuntu 20.04安装搜狗输入法无法输入中文

    根据搜狗输入法官网进行安装后 无法输入中文 这是由于缺少所需要的依赖 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml module qtquick2 sudo
  • 小白安装python+cuda+pytorh(gpu版本)

    首先说一下 安装前你需要自行安装anaconda和pycharm环境 推荐使用清华镜像安装anaconda https mirrors tuna tsinghua edu cn anaconda archive 第1步cuda下载 CUDA
  • node事件循环

    一 什么是事件循环 首先 node js的事件循环与JavaScript的略有不同 node中事件循环使node js可以通过将操作转移到系统内核中来执行非阻塞 I O操作 由于大多数现代内核都是多线程的 因此它们可以处理在后台执行的多个操
  • css3动画详解

    动画属性详解 1 transform 变形 动画的实际效果 a C3中支持操作 1 旋转 rotate 2 扭曲 skew 3 缩放 scale 4 移动 translate 5 矩阵变形 matrix b 使用介绍 rotate 旋转 1
  • 安装Msys2+pacman+mingw

    Msys2是在windows下提供的模拟GNU操作系统的环境 我觉得主要提供了一种模拟Linux操作的命令行环境 pacman是Msys2下的一个程序 我觉得类似CentOS下的yum ubuntu下的apt mingw按照我的理解 也是一
  • Ant Design Vue 之a-tab单元格编辑

    前言 最近遇到一个需求 要求表格中某一属性是可以单独改变的 看了 Ant Design Vue 的官方组件 发现不太灵活 所以自己动手写了一下 官方实现 先看一下官方demo演示效果 发现只能整行编辑 不能单独针对某个属性进行单独编辑 例如