Form表单与校验
第13课 Form表单与校验使用el-form搭建规范的表单掌握数据绑定与控件用法配置表单校验规则必填、格式、长度理解prop/rules/model三者的绑定关系实现校验通过才提交的完整流程包含新增与编辑回填场景1. el-form 表单基础1.1 核心组成标签/属性作用类比el-form表单容器整张登记表表格纸el-form-item表单的一行label为该行标题“姓名____”这一行:modelform将表单组件与数据对象绑定答题卡底稿背后的电子记录v-modelform.xxx控件双向绑定到底稿的字段笔尖落进格子1.2 基本模板骨架el-form:modelformlabel-width90pxel-form-itemlabel用户名el-inputv-modelform.nameplaceholder请输入//el-form-itemel-form-itemlabel角色el-selectv-modelform.roleplaceholder请选择el-optionlabel管理员value管理员/el-optionlabel编辑value编辑//el-select/el-form-itemel-form-itemlabel状态el-radio-groupv-modelform.statusel-radiovalue启用启用/el-radioel-radiovalue停用停用/el-radio/el-radio-group/el-form-item/el-formlabel-width统一行标题宽度防止表格歪扭form对象中的每个字段必须设置初始值空字符串否则后续重置时该字段无法被重置2. 校验规则 (rules)2.1 规则配置结构construles{name:[{required:true,message:请输入用户名,trigger:blur},{min:2,max:10,message:长度在 2 到 10 个字符,trigger:blur}],phone:[{required:true,message:请输入手机号,trigger:blur},{validator:checkPhone,trigger:blur}],email:[{required:true,message:请输入邮箱,trigger:blur},{type:email,message:邮箱格式不正确,trigger:blur}],role:[{required:true,message:请选择角色,trigger:change}]}每条规则包含三个要素查什么required/min/type/validator、不通过时说什么message、什么时候查trigger。2.2 常见校验类型类型写法示例适用字段必填{ required: true, message: ..., trigger: blur }所有必填项长度{ min: 2, max: 10, message: ..., trigger: blur }用户名、密码内置格式{ type: email, message: ..., trigger: blur }邮箱、网址自定义格式{ validator: checkFn, trigger: blur }手机号、身份证等trigger 选择规则输入框使用blur失焦时校验避免一边输入一边报错下拉框/单选框使用change值变化立刻校验。2.3 自定义校验函数functioncheckPhone(rule,value,callback){if(!value)returncallback()// 空值交给 required 处理constreg/^1[3-9]\d{9}$/if(reg.test(value)){callback()// 通过不传任何参数}else{callback(newError(手机号格式不正确11位数字))}}validator函数接收三个参数rule规则本身、value当前值、callback结果回调。2.4 让规则生效prop 绑定el-formrefformRef:modelform:rulesrulesel-form-itemlabel用户名propnameel-inputv-modelform.name//el-form-item/el-form核心规则prop的值、rules对象的键名、model对象里的字段名三者必须完全一致。写错任何一个该字段将永不校验。3. 提交、校验与重置3.1 校验与提交Promise 写法constformRefref(null)asyncfunctionhandleSubmit(){try{awaitformRef.value.validate()// 异步校验通过才继续// 能走到这里说明全部校验通过ElMessage.success(提交成功)}catch{ElMessage.error(还有没填对的地方请看红字提示)}}validate()是异步方法必须await等待结果校验通过 → 继续执行 try 内后续代码校验失败 → 直接跳入 catch已在表单项下方显示红字3.2 重置表单functionhandleReset(){formRef.value.resetFields()// 将所有字段恢复到初始值并清除红字}注意resetFields()重置到的是表单对象最初定义时的值如空字符串而非单纯“清空”。因此form中每个字段必须显式定义初始值否则不会被重置。3.3 提交时按钮防连点el-buttontypeprimary:loadingsavingclickhandleSave保存/el-button:loadingsaving保存中按钮显示转圈并禁用saving.value true在请求前设置finally中置回false4. 实战新增/编辑用户弹窗表单4.1 数据层api/user.js// 新增用户模拟后端接口真实项目替换为 axios 请求exportfunctioncreateUser(userData){returnnewPromise((resolve){setTimeout((){constnewUser{id:mockUsers.length1,...userData,createdAt:...}mockUsers.unshift(newUser)// 插入到数组头部列表第一页可见resolve(newUser)},600)})}// 更新用户exportfunctionupdateUser(id,userData){returnnewPromise((resolve){setTimeout((){consttargetmockUsers.find(uu.idid)if(target)Object.assign(target,userData)// 覆盖业务字段resolve(target)},600)})}4.2 弹窗与表单结构UserListView.vueel-dialogv-modeldialogVisible:titleeditingId ? 编辑用户 : 新增用户width480pxel-formrefformRef:modelform:rulesruleslabel-width80pxel-form-itemlabel用户名propnameel-inputv-modelform.name//el-form-item!-- 其他字段... --el-form-itemv-if!editingIdlabel密码proppasswordel-inputv-modelform.passwordtypepasswordshow-password//el-form-item/el-formtemplate#footerel-buttonclickdialogVisible false取消/el-buttonel-buttontypeprimary:loadingsavingclickhandleSave保存/el-button/template/el-dialog密码字段仅在新增时显示v-if!editingId编辑时不显示、不校验弹窗标题根据editingId动态切换4.3 打开弹窗逻辑防止数据残留functionopenDialog(user){formRef.value?.resetFields()// ★ 先重置表单清空输入和红字if(user){// 编辑模式逐字段赋值回填不可直接引用表格行对象editingId.valueuser.id form.nameuser.name form.phoneuser.phone form.emailuser.email form.roleuser.role form.statususer.status form.password}else{editingId.valuenull// 新增模式}dialogVisible.valuetrue}两个关键坑先重置再赋值如果不先resetFields()上次编辑的数据会残留在新增弹窗中逐字段赋值不能将表格行对象直接赋值给formObject.assign(form, user)否则修改表单会污染表格数据同一个引用4.4 保存逻辑asyncfunctionhandleSave(){try{awaitformRef.value.validate()// 校验constpayload{name:form.name,phone:form.phone,email:form.email,role:form.role,status:form.status}saving.valuetrueif(editingId.value){awaitupdateUser(editingId.value,payload)ElMessage.success(修改成功)}else{awaitcreateUser(payload)ElMessage.success(新增成功)}dialogVisible.valuefalseloadUserList()// ★ 重新拉取列表展示最新数据}catch{ElMessage.error(还有没填对的地方请看红字提示)}finally{saving.valuefalse}}5. 常见错误排查现象原因解决所有字段都不校验el-form没挂:rules或所有项缺少prop确保:rulesrules且每个el-form-item写了prop某个字段永远不校验prop与rules键名、model字段名不一致确保三个名称完全一致输入时每敲一个字符就报错输入框的trigger写成了change输入框改用blur下拉/单选用change下拉框选择后无反应下拉框的trigger写成了blur下拉框改为trigger: change点提交不校验也不提示未调用validate()或formRef名称不一致确认formRef.value.validate()已被调用校验失败但代码仍然往下执行validate()未使用await使用try { await validate() } catch { }包裹重置后表单未清空form对象中缺少某些字段的初始值确保所有字段在form中都定义了初始值编辑后再次新增仍显示旧数据打开弹窗前未调用resetFields()在openDialog函数第一行重置表单编辑保存后表格数据未更新保存成功后未刷新列表在handleSave成功回调中调用loadUserList()组件样式丢失裸奔未引入 Element Plus 样式文件在main.js中引入import element-plus/dist/index.css总结表单搭建el-form整张表→el-form-item一行→ 控件 v-model填格子校验规则rules对象为每个字段配置规则prop将规则与表单项绑定三名一致提交流程await validate()→ 通过后执行业务 →finally关闭 loading新增/编辑复用打开弹窗先重置编辑时逐字段回填避免引用污染保存后刷新列表调用接口成功后必须重新请求数据保持界面与数据一致

相关新闻

Table表格与Pagination分页

Table表格与Pagination分页

第12课 Table表格与Pagination分页 使用 el-table 渲染列表数据,掌握列配置(prop / label / width)通过作用域插槽自定义单元格(状态标签、操作按钮)实现 el-pagination 分页与表格联动,理解后端分页流程加…

2026/8/13 22:21:30 阅读更多 →
3.1 HDLBits —— 组合逻辑电路之基本门电路

3.1 HDLBits —— 组合逻辑电路之基本门电路

wire 搭建下述电路:输出 等于 输入参考答案 // synthesis verilog_input_version verilog_2001 // 模块功能:单比特直通缓冲器,输入信号无逻辑改动直接传递至输出 // 电路本质:纯导线连线,不产生额外逻辑门、无运算延迟…

2026/8/13 18:04:42 阅读更多 →
HarmonyOS 7.0 / API 26 DynamicLayout 断点策略实战:折叠屏拖拽时布局为什么会反复跳

HarmonyOS 7.0 / API 26 DynamicLayout 断点策略实战:折叠屏拖拽时布局为什么会反复跳

HarmonyOS 7.0 / API 26 DynamicLayout 断点策略实战:折叠屏拖拽时布局为什么会反复跳先把问题摆出来 DynamicLayout 最容易出问题的时刻不是页面第一次打开,而是折叠屏或鸿蒙电脑窗口被连续拖拽。宽度不断变化,列数不断切换,如果…

2026/8/13 20:26:11 阅读更多 →

最新新闻

无锡高端网站建设:不只是代码堆砌,更是品牌价值的数字化升维

无锡高端网站建设:不只是代码堆砌,更是品牌价值的数字化升维

在这个信息爆炸、注意力稀缺的时代,很多企业老板都有一个误区,觉得网站不过是“网上名片”,随便找个外包公司,套个模板,花个几千块钱就能搞定。毕竟,只要域名能打开,上面有些文字和图片,好像就完成了使命。但当我们深入探讨无锡高端网站建设的时候,就会发现这种想法简…

2026/8/14 10:09:14 阅读更多 →
“全能互联,极简启航”:伊士格智能EDI平台SwiftInt

“全能互联,极简启航”:伊士格智能EDI平台SwiftInt

SwiftInt 平台全景亮相全新一代智能EDI平台SwiftInt,致力于构建企业与业务伙伴间安全、自动化的数据交换枢纽,直面企业在数据互通中常遇到的技术门槛高、流程繁琐与人工操作易出错等核心挑战。平台全面支持各类EDI报文标准与交换协议,并集成A…

2026/8/14 10:09:14 阅读更多 →
数学建模竞赛实战:从数据清洗到模型优化,解析化工过程优化解题全流程

数学建模竞赛实战:从数据清洗到模型优化,解析化工过程优化解题全流程

1. 从拿到赛题到建立分析框架:一次完整的国赛B题复盘又到了一年一度的全国大学生数学建模竞赛季,后台和私信里关于“国赛B题”的讨论又多了起来。很多同学,尤其是第一次参赛的,面对B题这种典型的“综合性、开放性”题目&#xff0…

2026/8/14 10:09:14 阅读更多 →
Python无人机通信实战:pymavlink库从入门到应用

Python无人机通信实战:pymavlink库从入门到应用

1. 从零开始:为什么你需要关注pymavlink?如果你正在折腾无人机、无人车或者任何基于MAVLink协议的飞控系统,并且希望用Python来和它们“对话”,那么pymavlink这个库就是你绕不开的工具。我最早接触它,是因为需要写一个…

2026/8/14 10:09:14 阅读更多 →
兰州商城网站建设怎么避坑?深度解析本地电商转型痛点与实战指南

兰州商城网站建设怎么避坑?深度解析本地电商转型痛点与实战指南

做实业的老板们,特别是咱们西北圈子里的朋友,现在是不是都挺焦虑?你看外面,直播带货火得烫手,跨境电商风生水起,朋友圈里卖货的、做私域的,个个都像是拿到了财富密码。回头再看看自己实体店,或者以前那个稍微有点名气但没啥销路的老牌子,心里是不是特不是滋味?很多老…

2026/8/14 10:09:14 阅读更多 →
Linux软件管理核心:从rpm/dpkg到yum/apt的完整生态解析

Linux软件管理核心:从rpm/dpkg到yum/apt的完整生态解析

1. 项目概述:从零到一,掌握Linux软件管理核心刚接触Linux那会儿,最让我头疼的就是装软件。在Windows里,双击一个.exe文件,一路“下一步”就搞定了,但在Linux的命令行世界里,事情变得截然不同。你…

2026/8/14 10:08:14 阅读更多 →

日新闻

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

2026/8/14 0:00:26 阅读更多 →
Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

2026/8/14 0:00:26 阅读更多 →
大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

2026/8/14 0:01:27 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →