【Element】el-form和el-table嵌套实现表格编辑并提交表单校验
一、背景
页面需要用到表格采集用户数据,提交时进行表单校验;即表格中嵌套着表单,保存时进行表单校验
二、功能实现
2.1、el-form和el-table嵌套说明
① :model="formData" 给表单绑定数据,formData是表单的数据对象
② 表单数据对象formData中定义的tableData是表单内嵌套的表格显示数据
③ rules为表单绑定的校验规则
④ :prop="'tableData.' + scope.$index + '.name'" 绑定传入Form 组件的 model 中对应的字段name
⑤ :rules="rules.name" 绑定表单校验规则
⑥ 整个html结构是一个大表单 el-form里边嵌套的el-table,而el-table中又嵌套了表单项 el-form-item支持编辑。
备注:大多情况下prop会按照惯有思维直接写入字段,而这里是动态绑定的,另外一定要记得每项动态写入rules来进行绑定表单校验
2.2、具体代码
<template><div><el-form:model="formData"ref="formRef":rules="rules"label-width="108px":inline="true"><el-table:data="formData.tableData"style="width: 100%" border><el-table-column type="index" width="55" align="center"></el-table-column><el-table-column label="姓名" prop="name" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.name'" :rules="rules.name"><el-input type="text" size="small" placeholder="请输入姓名" v-model="scope.row.name"></el-input></el-form-item></template></el-table-column><el-table-column label="年龄" prop="age" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.age'" :rules="rules.age"><el-input type="text" size="small" placeholder="请输入年龄" v-model="scope.row.age"></el-input></el-form-item></template></el-table-column><el-table-column label="性别" prop="sex" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.sex'" :rules="rules.sex"><el-input type="text" size="small" placeholder="请输入性别" v-model="scope.row.sex"></el-input></el-form-item></template></el-table-column></el-table><el-form-item class="footer"><el-button type="primary" @click="save">保存</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template><script>
export default{data(){return{formData:{tableData:[{name:'张三',age:18,sex:''},{name:'李四',age:19,sex:''},]},rules:{name:[{ required: true, message: '请输入姓名', trigger: 'blur' },],age:[{ required: true, message: '请输入年龄', trigger: 'blur' },],sex:[{ required: true, message: '请输入性别', trigger: 'blur' },],}}},methods:{//保存save(){this.$refs.formRef.validate((valid) => {console.log('valid',valid);if(valid){//如果valid为true,表示校验通过,可以提交表单,调取接口进行保存console.log('表单校验通过');}else {this.$message.warning("请填写完整的数据");}})},}
}
</script><style lang="scss" scoped>
.footer{margin-top: 50px;
}
</style>
三、实际项目应用
3.1、增加添加与删除操作
需求:表格增加操作项,具有添加和删除按钮,第一项无法删除,点击添加时,动态增加表格的行数,点击删除的时候,删除表格的行数据。
3.2、添加和删除代码
结构:直接添加一个表格项
<el-table-column label="操作" resizable align="center" header-align="center"><template slot-scope="{$index}"><el-button type="primary" icon="el-icon-plus" circle @click="addTable()" v-if="$index == 0"></el-button><el-button icon="el-icon-minus" circle @click="delTable($index)" v-if="$index > 0"></el-button></template>
</el-table-column>
methods:{//添加addTable(){let newArr = [{name:'',age:'',sex:''}]this.formData.tableData.push(...newArr)},//删除delTable(i){this.formData.tableData.splice(i,1)}
}
3.3、完整代码
<template><div><el-form:model="formData"ref="formRef":rules="rules"label-width="108px":inline="true"><el-table:data="formData.tableData"style="width: 100%" border><el-table-column type="index" width="55" align="center"></el-table-column><el-table-column label="姓名" prop="name" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.name'" :rules="rules.name"><el-input type="text" size="small" placeholder="请输入姓名" v-model="scope.row.name"></el-input></el-form-item></template></el-table-column><el-table-column label="年龄" prop="age" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.age'" :rules="rules.age"><el-input type="text" size="small" placeholder="请输入年龄" v-model="scope.row.age"></el-input></el-form-item></template></el-table-column><el-table-column label="性别" prop="sex" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.sex'" :rules="rules.sex"><el-input type="text" size="small" placeholder="请输入性别" v-model="scope.row.sex"></el-input></el-form-item></template></el-table-column><el-table-column label="操作" resizable align="center" header-align="center"><template slot-scope="{$index}"><el-button type="primary" icon="el-icon-plus" circle @click="addTable()" v-if="$index == 0"></el-button><el-button icon="el-icon-minus" circle @click="delTable($index)" v-if="$index > 0"></el-button></template></el-table-column></el-table><el-form-item class="footer"><el-button type="primary" @click="save">保存</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template><script>
export default{data(){return{formData:{tableData:[{name:'张三',age:18,sex:'男'},{name:'李四',age:19,sex:''},]},rules:{name:[{ required: true, message: '请输入姓名', trigger: 'blur' },],age:[{ required: true, message: '请输入年龄', trigger: 'blur' },],sex:[{ required: true, message: '请输入性别', trigger: 'blur' },],}}},methods:{//保存save(){this.$refs.formRef.validate((valid) => {console.log('valid',valid);if(valid){//如果valid为true,表示校验通过,可以提交表单,调取接口进行保存console.log('表单校验通过');}else {this.$message.warning("请填写完整的数据");}})},//添加addTable(){let newArr = [{name:'',age:'',sex:''}]this.formData.tableData.push(...newArr)},//删除delTable(i){this.formData.tableData.splice(i,1)}}
}
</script><style>
.footer{margin-top: 50px;
}
</style>
3.4、实际效果

最后:👏👏 😀😀😀 👍👍
相关文章:
【Element】el-form和el-table嵌套实现表格编辑并提交表单校验
一、背景 页面需要用到表格采集用户数据,提交时进行表单校验;即表格中嵌套着表单,保存时进行表单校验 二、功能实现 2.1、el-form和el-table嵌套说明 ① :model"formData" 给表单绑定数据,formData是表单的数据对象 …...
初识Winform
什么是winform? WinForms(Windows Forms)是Microsoft .NET框架中的一个用户界面(UI)技术,用于创建Windows应用程序。它提供了一组用于构建图形用户界面的类和控件,以及与用户交互的事件模型。 …...
Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis实战4(解决Redis缓存穿透、雪崩、击穿) 📚订阅专…...
前端优化之一:dns预获取 dns-prefetch 提升页面载入速度
问题:怎么做到dns域解析? 用于优化网站页面的图片 问题:怎么提升网站性能? dns域解析,是提升网站的一个办法。 DNS Prefetch,即DNS预获取,是前端优化的一部分。 一般来说,在前端…...
C语言中一些基本数据类型的典型大小
char:通常是1字节。表示一个字符。int:通常在现代系统中是4字节(但这取决于编译器和架构,有时可能是2字节)。float:通常是4字节。double:通常是8字节。short 和 short int:通常是2字…...
[C/C++]排序算法 快速排序 (递归与非递归)
目录 🚩概念: 🚩实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 🚩快速排序递归实现 🚩快速排序非递归实现 🚩概念: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有…...
『年度总结』逐梦编程之始:我的2023学习回顾与展望
目录 前言 我与Python 我与C语言 第一篇正式博客: 第二篇正式博客(扫雷): 指针学习笔记: C语言学习笔记: 我与数据结构: yuan 这篇博客,我将回顾2023年编程之旅的起点,同时展…...
MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发
前言 公司要求没办法,前端也要了解一下后端知识,这里记录一下自己的学习 学习教程:黑马mybatis教程全套视频教程,2天Mybatis框架从入门到精通 文档: https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…...
【React系列】受控非受控组件
本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. refs 的使用 在React的开发模式中,通常情况下不需要、也不建议直接操作DOM原生,但是某些…...
OpenCV-Python(22):2D直方图
目标 了解图像的2D直方图绘制2D直方图 介绍 在前面的部分我们介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在2D 直方图中我们就需要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要…...
Kubernetes 100个常用命令
本文简单总结关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于: 集群信息 Pod 诊断 服务诊断 部署诊断 网络诊断 持久卷和持久卷声明诊断 资源…...
labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词
差分数组–前缀和数组的升级 LeetCode 1109 航班预定统计 2024.1.1 题目链接labuladong讲解[链接] class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {//构建航班人数数组,数组大小为n,初…...
HbuilderX中的git的使用
原文链接https://blog.csdn.net/Aom_yt/article/details/119924356...
LeetCode每日一题 | 1944. 队列中可以看到的人数
文章目录 队列中可以看到的人数题目描述问题分析程序代码(Golang 版本) 队列中可以看到的人数 题目描述 原题链接 有 n 个人排成一个队列,从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights ,每个整数 互不相同ÿ…...
React16源码: JSX2JS及React.createElement源码实现
JSX 到 Javascript 的转换 React中的 JSX 类似于 Vue中的template模板文件,Vue是基于编译时将template模板转换成render函数在React中,JSX是类似于html和javascript混编的语法,而javascript是真的javascript, html并非真的html它的可阅读性可…...
整理composer安装版本的python脚本
整理composer安装版本的python脚本 脚本实现的功能是去除composer安装命令后的版本号 def remove_version_numbers(commands):"""Remove version numbers from composer require commands.Args:commands (list of str): List of composer require commands.Retu…...
十、基本对话框大集合(Qt5 GUI系列)
目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各…...
大A又跌了
才开盘几天,又开始下跌了。生活更加苦难。期待高深算法。...
This error originates from a subprocess, and is likely not a problem with pip
我遇这个问题是的原因是包名错误 注意检查包名...
数据库基础知识1
关系模型的程序员不需熟悉数据库的存取路径 在3层模式结构中,___I___是数据库的核心和关键,___Ⅱ___通常是模式的子集,数据库模式的描述提供给用户,____Ⅲ__的描述存储在硬盘上。Ⅰ.模式Ⅱ. 外模式Ⅲ. 内模式 数据库中,数据的物理独立性是指用户的应用程序与存储在磁盘上数据库…...
AI产品经理 VS 传统产品经理:不是技术升级,而是物种进化!你准备好了吗?
文章指出,AI时代的产品经理并非仅仅是懂点AI技术的传统产品经理升级版,而是完全不同的“物种”。文章从产品经理的职责、核心能力、与AI的协作模式等方面对比了传统产品经理和AI产品经理的区别,强调AI产品经理需要具备处理意图模糊性、设计失…...
Unity性能优化实战:Mesh Baker 纹理合并与UV重映射详解
1. 为什么需要纹理合并与UV重映射 在开发开放世界游戏时,场景中往往会出现大量重复的建筑、植被等模型。每个模型通常都有自己的材质球和贴图,这会导致两个严重问题:首先是Draw Call数量激增,每个材质球都会产生一次Draw Call&…...
为什么我们的浏览器操作效率低下?如何用Shortkeys扩展实现3倍效率提升
为什么我们的浏览器操作效率低下?如何用Shortkeys扩展实现3倍效率提升 【免费下载链接】shortkeys A browser extension for custom keyboard shortcuts 项目地址: https://gitcode.com/gh_mirrors/sh/shortkeys 每天在浏览器上,我们花费大量时间…...
5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南
5分钟快速上手:qmcdump免费解密QQ音乐文件的终极指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否…...
基于Jina Reader与Exa API的免费网页抓取与搜索工具实践
1. 项目概述:一个轻量级的网络信息抓取与处理工具最近在折腾一些自动化信息处理的项目,发现很多时候需要从网上快速抓取内容或者进行关键词搜索,然后对结果进行结构化处理。市面上的工具要么太重,要么收费,要么就是API…...
边缘TTS实战:本地部署高质量语音合成与性能优化指南
1. 项目概述:当TTS遇见边缘计算最近在折腾一个需要实时语音合成的项目,发现了一个挺有意思的仓库:travisvn/openai-edge-tts。这名字一看就很有料,把“OpenAI”和“Edge-TTS”这两个词组合在一起,背后指向的是一个非常…...
网络安全入门:2026年转行网络安全完整路径图
网络安全入门:2026 年转行网络安全完整路径图 导语:2026 年,网络安全人才缺口达 150 万,平均薪资较传统 IT 岗位高出 30%。但 70% 的转行者因路径不清晰而失败。本文详解 2026 年转行网络安全的完整路径:学习路线、证…...
利用ODX实现整车诊断数据库管理
一:背景与挑战| 背景:在全球汽车行业快速发展的背景下,对车辆诊断技术的要求也在不断提升。ODX(Open Diagnostic data eXchange)作为行业标准的诊断数据库,已被各大汽车制造商广泛采用,并贯穿于ECU的整个生…...
电源完整性设计:电容模型、去耦策略与测量验证实战解析
1. 电容与去耦:从概念到实战的深度解析上周我们聊了聊去耦电容在电源完整性设计中的一些基本概念和时机选择,算是开了个头。这周咱们继续深入,把这块硬骨头啃得更透一些。很多工程师,尤其是刚入行的朋友,常常觉得电容选…...
记一次ubuntu 22.04安装旧版 MongoDB 4.2
22.04版本比较新,由于mongodb 2.4太老了,安装会遇到问题。特此记录1. 下载mongodb包wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.24.tgz2. 解压到当前目录sudo tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.2.24.tgz3.…...
