Ant Design Vue实现表格双击编辑、添加新行、文字提示

news/2024/11/29 9:36:38/

早上刚上班,产品就朝我工位走了过来,一看大事不好,肯定又是来提需求的!

产品:做一个表格,要实现双击编辑的功能

我:做不了

产品:老板提的

我:好的,可以做

老板提的不能做也滴做😂

申明:项目基于Vue+Ant Design实现

表格双击编辑单元格

想要实现双击编辑单元格,先开发一个简单的表格(废话)
image.png

 <a-table :columns="columns" :data-source="data">     </a-table>
const columns = [{title: 'Name',dataIndex: 'name',key: 'name',},{title: 'Age',dataIndex: 'age',key: 'age',},{title: 'Address',dataIndex: 'address',key: 'address',},{title: 'Tags',key: 'tags',dataIndex: 'tags',},
]
const data = [{key: '1',name: 'John Brown',age: 32,address: 'New York No. 1 Lake Park',tags: 'nice',},{key: '2',name: 'Jim Green',age: 42,address: 'London No. 1 Lake Park',tags: 'loser',},{key: '3',name: 'Joe Black',age: 32,address: 'Sidney No. 1 Lake Park',tags: 'teacher',},
]

现在实现Name列可双击编辑的功能,设置Name列可以自定义

  {title: 'Name',dataIndex: 'name',key: 'name',scopedSlots:{customRender:'name'}},

在表格中自定义Name列的内容

<template slot="name" slot-scope="record"><editable-cell :record="record" @changeAll="onCellChange" />
</template>

其中editable-cell是需要我们自己写的一个子组件

双击编辑表格单元格的原理就是,默认展示表格内容,双击单元格之后展示一个input框,input框也绑定了这个值,input框失去焦点之后,并将这个值传回给父组件

子组件editable-cell

我们首先需要实现的就是将我们的原本表格中的内容展示出来,表格展示的内容是存在于父组件中的。

这里就涉及到了父子组件通信,子组件接收父组件传递的内容是通过props

  props: {record: Object},

获取到表格内容之后,然后就是表格内容的展示

    <div v-show="editable == false" @dblclick="edit">{{ value || ' ' }}</div>  //其中value的值为value: this.record.name,

editable初始值是false,默认展示的就是value,value的值就是我们从父组件获取的表格的值text
并且这个div块绑定了一个双击函数edit

 edit() {this.editable = truethis.$nextTick(() => {this.$refs.myInput.focus()})},

edit函数是将editable的值设置为true,设置为true之后展示的是input输入框,并设置input框自动获取焦点。这里需要注意的是直接写this.$refs.myInput.focus()不会生效,需要设置等下次DOM更新之后再触发这个事件。

    <div v-show="editable" ><a-inputv-model="value"@pressEnter="check"@blur="check"size="small"ref="myInput"/></div>

image.png
input框绑定了两个事件,失去焦点和按下enter键。触发的是一个函数check函数,将editable的值设置为false,单元格展示的就是值而不再是输入框,这里我们需要将修改的值传回给父组件,子向父传递是通过$emit

 check() {this.editable = falsethis.record.name=this.valuethis.$emit('changeAll', this.value)}  

子组件触发了changAll函数

 onCellChange(record) {console.log(record,'123')console.log(this.data,'999')},

这里我们打印了record和我们表格的数组,对应数据都成功作出修改
image.png

添加新行

<div class="operate"><a-button type="dashed" style="width: 100%" icon="plus" @click="addList">添加</a-button>
</div>

image.png
一个实现思路是往数组中添加一行新的空数据

  addList() {this.data1.push({key: this.data1.length +1,name: '' ,age: '',address: '',tags: '',})console.log(this.data1)},

添加的新数据我们也可以进行双击编辑功能
image.png

文字提示

如果我们想要实现文字提示功能,并且想要多行内容展示,需要使用a-tooltip组件

  <a-tooltip placement="topLeft"><template #title>Name: {{ record.name }},<br />Key: {{ record.key }}</template><editable-cell :record="record" @changeAll="onCellChange" /></a-tooltip>

多行内容展示自定义template
image.png

到此所有的需求都实现了,本人蒟蒻一枚,大佬请划走(轻点喷)…


http://www.ppmy.cn/news/573106.html

相关文章

mysql-checkpoint

checkpoint&#xff1a; 缩短数据库的恢复时间 缓存空间不够用时&#xff0c;将脏页刷新到磁盘 (重做)缓存日志不可用时&#xff0c;刷新脏页 sharp checkpoint&#xff1a;完全检查点&#xff0c;数据库正常关闭则将脏页全部写入磁盘 uzzy checkpoint&#xff1a;模糊检查点&…

【checkpoint】深入了解checkpoint过程

前言:你知道对数据库修改的操作会通过记录到redo log中&#xff1b;知道数据库断电down掉或shutdown abort后&#xff0c;重新启动数据库时需要利用redo log对提交但没有被刷入磁盘中的数据进行实例恢复。好像我们明白了这个知识点&#xff0c;但如果你继续深入细致地思考一下&…

Flink的CheckPoint机制

这里已经是Flink的第三篇原创啦。第一篇&#xff1a;Flink入门讲解了Flink的基础和相关概念&#xff0c;第二篇&#xff1a;压背原理&#xff0c;讲解了什么是背压&#xff0c;在Flink背压大概的流程是怎么样的。 这篇来讲Flink另一个比较重要的知识&#xff0c;就是它的容错机…

checkpoint扫盲

什么是checkpoint? 在数据库系统中&#xff0c;写日志和写数据文件是数据库中IO消耗最大的两种操作&#xff0c;在这两种操作中写数据文件属于分散写&#xff0c;写日志文件是顺序写&#xff0c;因此为了保证数据库的性能&#xff0c;通常数据库都是保证在提交&#xff08;com…

Spark09: Spark之checkpoint

一、checkpoint概述 checkpoint&#xff0c;是Spark提供的一个比较高级的功能。有时候&#xff0c;我们的Spark任务&#xff0c;比较复杂&#xff0c;从初始化RDD开始&#xff0c;到最后整个任务完成&#xff0c;有比较多的步骤&#xff0c;比如超过10个transformation算子。而…

检查点checkpoint

定义 数据库内部事件&#xff0c;检查点激活会出发数据库写进程&#xff0c;dbwr&#xff0c;将数据缓冲区里面脏数据写道数据文件中 dbwr与事务提交无关&#xff0c;数据库在某个时候存在已提交的事务还没写到磁盘&#xff0c;或者未提交的事务已经写道磁盘 脏块写得慢&…

TEC半导体热电温控技术在复合相变材料储热性能测试中的应用

摘要&#xff1a;针对定形相变复合材料热性能测试中ASTM C1784动态热流计法和ASTM C518稳态热流计法的高精度可编程快速温度控制问题&#xff0c;本文提出了采用单独两路TEC半导体热电加热制冷模组作为执行机构的解决方案。解决方案中还配备了不同加热功率的TEC控制电源模块、高…

D. Checkpoints

D题链接 题意&#xff1a;有n个点&#xff0c;每个点可以放1也可以不放1&#xff0c;某个人从1开始挑战&#xff0c;包括1&#xff0c;n都要挑战&#xff0c;挑战成功的概率和失败概率一样都是1/2&#xff0c;如果失败了就会回到离i这个点最近的1的点&#xff0c;问最后通关(挑…