vue2实践:el-table实现由用户自己添加删除行数的动态表格

需求

项目中需要提供一个动态表单,如图:

当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。

至少要有一行数据,但是没有上限。

24052270805141a1baaebbae5a9bdda9.png

思路

这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是:

1、table里面的每一个cell,需要放置一个input来支持用户编辑。

2、最后一列放置两个button,响应用户添加或删除行的需求

实现

data

managerList:[{userId:undefined,nickName:undefined,phonenumber:undefined
}],

template 

因为要求至少有一行数据,所以删除按钮增加一个判断,v-if="managerList.length > 1",当只剩一行数据时,删除按钮隐藏,不允许再点击

<el-table :data="managerList">        <el-table-column label="姓名" align="center" prop="nickName"><template slot-scope="scope"><el-input v-model.trim="scope.row.nickName" placeholder="请输入项目经理姓名"/></template></el-table-column><el-table-column label="电话号码" align="center" prop="phonenumber"><template slot-scope="scope"><el-input v-model.trim="scope.row.phonenumber" placeholder="请输入电话号码"/></template></el-table-column><el-table-column label="操作" align="center" prop="status"><template slot-scope="scope"><el-link type="primary" icon="el-icon-plus" :underline="false" @click="addRow">新增</el-link><el-link type="primary" icon="el-icon-delete-solid" :underline="false" @click="deleteRow(scope.$index,scope.row)"v-if="managerList.length > 1">删除</el-link></template></el-table-column></el-table>

methods

input不需要特殊处理。但是两个按钮要响应用户操作:

新增

当点击新增时,希望增加一行。基于Vue的响应式原理,data中的managerList数组增加一项即可,使用managerList.push;

addRow(){let manager = {userId:undefined,nickName: undefined,phonenumber: undefined};this.managerList.push(manager);
},

删除

当点击删除时,希望减少一行,同理,managerList中该行数据删除:

deleteRow(index,row){this.managerList.splice(index, 1);
},

如果这里全部都是新增数据,这样就可以了,但是,如果其中有初始数据,而删除的数据又是初始数据的话,需要记录哪个数据要被删除,以便保存时进行真正的数据删除

deleteRow(index,row){this.managerList.splice(index, 1);//获取被删除的用户id,以便保存时将账户状态置为禁用if(row.userId != "" && row.userId != undefined){this.delUsers.push(row);}
},

数据校验

validateInput(){for (let i = 0; i < this.managerList.length; i++) {this.managerList[i].nickName = this.managerList[i].nickName.trim();if (this.managerList[i].nickName === undefined || this.managerList[i].nickName === ""|| this.managerList[i].nickName === null|| this.managerList[i].phonenumber === undefined || this.managerList[i].phonenumber === "" ||this.managerList[i].phonenumber === null) {this.msgError(`第 ${i + 1} 项姓名或手机号码不能为空`);return false;}const regex = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;if (!regex.test(this.managerList[i].phonenumber)) {this.msgError(`第 ${i + 1} 项电话号码格式错误`);return false;}//判断重复项for (let j = 0; j < i; j++) {if (this.managerList[j].nickName === this.managerList[i].nickName &&this.managerList[j].phonenumber === this.managerList[i].phonenumber) {this.msgError(`第 ${i + 1} 项"${this.managerList[i].nickName}"重复添加`);return false;}}}return true;},

保存

submitManagerList(){if(this.validateInput()){this.removeManagers();this.addOrUpdateManagers();        }
},

至此,可以由用户自己控制行数的动态表格就完成了。

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信刻光盘安全隔离与信息交换系统

随着各种数据传输、储存技术、信息技术的快速发展&#xff0c;保护信息安全是重中之重。军工、政府、部队及企事业单位等利用A网与B网开展相关工作已成为不可逆转的趋势。针对于业务需要与保密规范相关要求&#xff0c;涉及重要秘密信息&#xff0c;需做到安全的物理隔离&#…

PHP实时统计结果秒出高效能在线投票工具系统小程序源码

实时统计&#xff0c;结果秒出 —— 体验高效能在线投票工具系统 &#x1f680; 投票新纪元&#xff0c;效率为王&#xff01; 在这个快节奏的时代&#xff0c;每一秒都至关重要。你是否厌倦了传统投票方式中漫长的等待和繁琐的统计过程&#xff1f;那么&#xff0c;就让我带你…

数字乡村网络文化服务平台建设方案

1. 平台建设背景与目标 数字乡村网络文化服务平台的建设旨在通过数字化手段整合乡村内外资源&#xff0c;打造全面覆盖、精准服务的乡村服务体系&#xff0c;以改善民生和促进社会稳定。平台包括居民管理、互动交流、服务管理等五大应用&#xff0c;实现乡村服务的多元化、精确…

Mac在Python项目中通过opencv模版匹配定位不到图片

起因 原本一行代码的事情&#xff0c;但是在Mac上总能出现意外&#xff0c;如下 box pyautogui.locateOnScreen(obsidian.png) print(box) pyautogui.moveTo(box[0],box[1])上面的代码用来定位图片在屏幕中的位置&#xff0c;然后移动鼠标到定位到的屏幕位置坐标。 意外…

实战OpenCV之像素操作

基础入门 在OpenCV中&#xff0c;像素是最基本的操作单位。图像可以视为一个三维数组&#xff0c;其中第三维表示颜色通道。图像数据在内存中以连续或几乎连续的方式存储&#xff0c;对于多通道图像&#xff08;比如&#xff1a;BGR图像&#xff09;&#xff0c;每个像素的各通…

EmguCV学习笔记 VB.Net 11.5 目标检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

初识时序数据库InfluxDB

最近项目开发中,需要记录时间序列的日志信息,InfluxDB 刚好契合。于是准备研究一下,发现已经有整理很好的文档,以下两篇觉得很好,入门开发可以参考一下。 因为项目是用C#开发的,因此,简单介绍一下C#开发中,InfluxDB的API使用。 1.简介 InfluxDB是一个由InfluxData开发…

《食品安全导刊》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《食品安全导刊》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《食品安全导刊》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a; 中国商业联合会 主办单…

ONLYOFFICE8.0部署集成(vue+java)并配置存储为minio

文章目录 前言一、使用docker安装onlyoffice8安装使用DockerDesktop方式命令行方式使用 HTTPS 运行展示 二、项目集成前端集成-vue3html方式后端集成-java 三、onlyoffice基础原理四、配置存储为minio1.onlyoffice配置文件挂载问题2.配置存储为minio3.验证切换minio存储是否生效…

生成式AI介绍

生成式AI介绍 生成式AI&#xff08;Generative AI&#xff09;是人工智能领域的一种技术&#xff0c;能够通过学习现有数据来生成新的内容。不同于传统的人工智能模型只进行分类、回归等分析任务&#xff0c;生成式AI具备创作能力&#xff0c;能够生成文本、图像、音频甚至视频…

基于spring拦截器实现博客项目的强制登录功能(四)

6. 强制登录 当⽤⼾访问 博客列表和博客详情⻚ 时, 如果⽤⼾当前尚未登陆, 就⾃动跳转到登陆⻚⾯. 我们可以采⽤拦截器来完成, token通常由前端放在header中, 我们从header中获取token, 并校验 token是否合法 6.1 添加拦截器 package com.example.spring_blog_24_9_8.config;…

性能测试-jmeter的控制器(十六)

一、if控制器 需求&#xff1a;使用“用户自定义变量”定义name变量&#xff0c;值可以是“baidu”或“itcast”,使用变量值&#xff0c;控制是否访问对应网站。 1、步骤&#xff1a; 在测试计划中添加用户定义的变量name,取值可为baidu或itcast添加两个http请求&#xff1a…

misc音频隐写

一、MP3隐写 &#xff08;1&#xff09;题解&#xff1a;下载附件之后是一个mp3的音频文件&#xff1b;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密&#xff1b;mp3stego工具是音频数据分析与隐写工具 &#xff08;2)mp3stego工具的使用&#xff1a;…

CSS实现前端布局更巧妙的方案!在 flex 布局中通过使用 margin 实现水平垂直居中以及其他常见的前端布局

在前端开发中&#xff0c;实现水平垂直居中一直是个热门话题。随着 CSS Flexbox 布局的普及&#xff0c;开发者们开始更多地使用 justify-content 和 align-items 这两个属性来解决这个问题。 然而&#xff0c;还有一种更加简洁、灵活的方式——使用 margin: auto; 来实现居中以…

大数据之Flink(二)

4、部署模式 flink部署模式&#xff1a; 会话模式&#xff08;Session Mode&#xff09;单作业模式&#xff08;Per-Job Mode&#xff09;应用模式&#xff08;Application Mode&#xff09; 区别在于集群的生命周期以及资源的分配方式&#xff1b;以及应用的main方法到底在…

Vue3使用vue-qrcode-reader实现扫码绑定设备功能

需求描述 移动端进入网站后&#xff0c;登录网站进入设备管理界面。点击添加设备&#xff0c;可以选择直接添加或者扫一扫。点击扫一扫进行扫描二维码获取设备序列号自动填充到添加设备界面的序列号输入框中。然后点击完成进行设备绑定。 安装vue-qrcode-reader 这里使用的版…

2024.9.11 作业

绘制组件制作时钟 代码&#xff1a; /*******************************************/ 文件名&#xff1a;widget.h /*******************************************/ #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include &l…

MAX3483ESA+T具有±15kV ESD保护的+3.3V、低功耗收发器,适用于RS-485和RS-422通信

MAX3483ESAT具有15kV ESD保护的3.3V、低功耗收发器&#xff0c;适用于RS-485和RS-422通信。每个器件包含一个驱动器和一个接收器。MAX3483ESAT具有限摆率驱动器&#xff0c;可充分降低EMI并减少因电缆端接不当引起的反射&#xff0c;从而实现数据速率高达250kbps的无误差数据传…

【中间件】-容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么&#xff1f; K8s的架构原理 控制平面(Control plane) kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 小结 节点组件(Node) container runtime Pod kubelet ku…

AnyChart 数据可视化框架

AnyChart 数据可视化框架 AnyChart 是一个灵活的 JavaScript&#xff08;HTML5、SVG、VML&#xff09;图表框架&#xff0c;适合任何需要数据可视化的解决方案。 目录 下载并安装开始插件将 AnyChart 与 TypeScript 结合使用将 AnyChart 与 ECMAScript 6 结合使用技术集成贡献…