vue2以及vue3基于el-table实现表格正则校验功能

常见需求:

在项目中,通常会在表格中添加多条数据,并需要对添加的数据进行校验功能,这时候就是很头疼的事了,下面酱酱仔给你们写个示例,你们无脑粘贴复制即可。

注意事项:

1、校验里面用到了正则校验功能,大家可以参考 酱酱仔的lgb-x文档lgb-xicon-default.png?t=N7T8https://yjfk.hgjt.cn:9901后续酱酱仔将会持续迭代更新lgb-x库以及对应的lgb-x文档(lgb-x库不做重复轮子,只做业务场景常用组件以及api公共方法,致力于打造更便捷组件,提升开发效率

2、示例是vue2.0写法,vue3.0也可以无脑使用,不过需要换成组合式api写法即可。

实现介绍:

1、首先默认给表格数据每行设置  isKeyValid: false ,目的是为了表格一开始打开时候,每行上下边距为0。

  tableData: [{date: "",name: "",address: "",isKeyValid: false,},{date: "",name: "",address: "",isKeyValid: false,},],

2、其次在模版里面表格外层嵌套el-from表单,表格列插槽字段嵌套el-form-item,同时需要动态绑定class样式。

<template><div class="app-container"><div class="table-form">{{ {tableData} }}<div style="margin-right: 0"><el-button type="primary" @click="add">新增</el-button></div><el-form :model="{tableData}" ref="ruleForm" label-width="0px"><el-table :data="tableData" border style="width: 100%"><el-table-column label="日期"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].date`":rules="{validator: validateDate,trigger: ['blur', 'change'],id: scope.$index,},"><el-date-pickerv-model="scope.row.date"value-format="yyyy-MM-dd"type="date"placeholder="选择日期"/></el-form-item></div></template></el-table-column><el-table-column label="姓名"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].name`":rules="{validator: validateName,trigger: ['blur', 'change'],id: scope.$index,},"><el-input type="input" v-model="scope.row.name" /></el-form-item></div></template></el-table-column><el-table-column label="地址"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].address`":rules="{validator: validateAddress,trigger: ['blur', 'change'],id: scope.$index,},"><el-input type="input" v-model="scope.row.address" /></el-form-item></div></template></el-table-column></el-table></el-form><div><el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button><el-button @click="resetForm('ruleForm')">重置</el-button></div></div></div>
</template>

3、然后再在css里面定义对应的动态绑定的class类名样式,为了清空自带的表格外边距。

<style scoped lang="scss">
::v-deep .el-form-item {margin-bottom: 0 !important;
}.rulesFail {margin: 18px 0 !important;
}.rulePass {margin: 0 !important;
}
</style>

4、最后再methods方法里面写校验逻辑

<script>
export default {name: "DemoPage",components: {},data() {return {tableData: [{date: "",name: "",address: "",isKeyValid: false,},{date: "",name: "",address: "",isKeyValid: false,},],};},methods: {add() {this.tableData.push({date: "",name: "",address: "",isKeyValid: false,});},submitForm(formName) {this.$refs[formName].validate((valid) => {if (valid) {this.$message.success("校验通过");} else {console.log("error submit!!");return false;}});},resetForm(formName) {this.$refs[formName].resetFields();},//校验日期validateDate(rule, value, callback) {if (value === "" || value === null) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入日期"));} else {callback();// if (this.tableFormData.tableData[rule.id].isKeyValid) {//   this.tableFormData.tableData[rule.id].isKeyValid = false;// }}},//校验姓名validateName(rule, value, callback) {const regExp = /^[\u4e00-\u9fa5a-zA-Z]+$/;if (!regExp.test(value)) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入有效的姓名(仅限中英文,不包含特殊符号)"));} else {callback();}},//校验地址validateAddress(rule, value, callback) {if (value === "" || value === null) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入地址"));} else {callback();}},},
};
</script>

整个demo代码如下:粘贴放到项目页面参考即可

<!--* @Author: lgb1224 185023762@qq.com* @Date: 2024-06-19 11:38:11* @LastEditors: LAPTOP-9J0AUDN8* @LastEditTime: 2024-08-01 17:38:54* @FilePath: \vue-admin\src\views\environmentMonitor\governanceFacilities\sulfurNitrate\index.vue* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template><div class="app-container"><div class="table-form">{{ {tableData} }}<div style="margin-right: 0"><el-button type="primary" @click="add">新增</el-button></div><el-form :model="{tableData}" ref="ruleForm" label-width="0px"><el-table :data="tableData" border style="width: 100%"><el-table-column label="日期"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].date`":rules="{validator: validateDate,trigger: ['blur', 'change'],id: scope.$index,},"><el-date-pickerv-model="scope.row.date"value-format="yyyy-MM-dd"type="date"placeholder="选择日期"/></el-form-item></div></template></el-table-column><el-table-column label="姓名"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].name`":rules="{validator: validateName,trigger: ['blur', 'change'],id: scope.$index,},"><el-input type="input" v-model="scope.row.name" /></el-form-item></div></template></el-table-column><el-table-column label="地址"><template slot-scope="scope"><div :class="scope.row.isKeyValid ? 'rulesFail' : 'rulePass'"><el-form-itemlabel="":prop="`tableData[${scope.$index}].address`":rules="{validator: validateAddress,trigger: ['blur', 'change'],id: scope.$index,},"><el-input type="input" v-model="scope.row.address" /></el-form-item></div></template></el-table-column></el-table></el-form><div><el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button><el-button @click="resetForm('ruleForm')">重置</el-button></div></div></div>
</template>
<script>
export default {name: "DemoPage",components: {},data() {return {tableData: [{date: "",name: "",address: "",isKeyValid: false,},{date: "",name: "",address: "",isKeyValid: false,},],};},methods: {add() {this.tableData.push({date: "",name: "",address: "",isKeyValid: false,});},submitForm(formName) {this.$refs[formName].validate((valid) => {if (valid) {this.$message.success("校验通过");} else {console.log("error submit!!");return false;}});},resetForm(formName) {this.$refs[formName].resetFields();},//校验日期validateDate(rule, value, callback) {if (value === "" || value === null) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入日期"));} else {callback();// if (this.tableFormData.tableData[rule.id].isKeyValid) {//   this.tableFormData.tableData[rule.id].isKeyValid = false;// }}},//校验姓名validateName(rule, value, callback) {const regExp = /^[\u4e00-\u9fa5a-zA-Z]+$/;if (!regExp.test(value)) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入有效的姓名(仅限中英文,不包含特殊符号)"));} else {callback();}},//校验地址validateAddress(rule, value, callback) {if (value === "" || value === null) {this.tableData[rule.id].isKeyValid = true;callback(new Error("请输入地址"));} else {callback();}},},
};
</script>
<style scoped lang="scss">
::v-deep .el-form-item {margin-bottom: 0 !important;
}.rulesFail {margin: 18px 0 !important;
}.rulePass {margin: 0 !important;
}
</style>

效果如下所示:

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

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

相关文章

【Unity】3D功能开发入门系列(一)

Unity3D功能开发入门系列&#xff08;一&#xff09; 一、开发环境&#xff08;一&#xff09;安装 Unity&#xff08;二&#xff09;创建项目&#xff08;三&#xff09;Unity 窗口布局 二、场景与视图&#xff08;一&#xff09;场景&#xff08;二&#xff09;游戏物体&…

前端日历插件VCalendar

官网地址 API | VCalendar 1.安装 yarn add v-calendarnext popperjs/core 2.全局引入 mian.js //日历插件 import VCalendar from v-calendar; import v-calendar/style.css;app.use(VCalendar); 3.使用 <div><VCalendar reservationTime expanded borderless…

java各种锁有什么区别

Java 虚拟机&#xff08;JVM&#xff09;中有几种不同类型的锁&#xff0c;每种锁都有其特定的用途和性能特点。下面我将为你介绍几种常见的锁&#xff1a; 1.独占锁&#xff08;也称为悲观锁&#xff09;&#xff1a; 1.synchronized&#xff1a;这是 Java 提供的一种内置的独…

股指期货的套利策略存在哪些风险?

股指期货套利的交易策略。它能够纠正市场上不合理的价格偏差&#xff0c;将价格拉回到正常的轨道。套利交易以其稳健的收益吸引着投资者&#xff0c;但同时也容易让人陷入一个误区——认为套利是无风险的。实际上&#xff0c;套利同样存在风险&#xff0c;只是相对于纯粹的投机…

问题易如反掌?5个常用的AI人工智能助手推荐

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 如今的人工智能技术正以惊人的速度改变着我们的生活方式和工作方式。作为这一变革的关键驱动力&#xff0c;人工智能不仅在科技…

短剧CPS分销系统框架+资源对接是怎么对接的?

目录 前言&#xff1a; 一、前端uniapp内容有什么&#xff1f; 二、后台管理 三、搭建CPS需要准备什么&#xff1f; 总结&#xff1a; 前言&#xff1a; 目前短剧目前在国内是非常的热门&#xff0c;观看的人群非常的多。如果希望能够通过推广短剧来做副业的话&#xff0c…

深入理解PreparedStatement

预处理 Overridepublic boolean login(String username, String userpwd) {Connection con DBUtils.getConnection();try {if(con ! null){PreparedStatement pstmt con.prepareStatement("select username,userpwd from " " users where username? and us…

硬核!288页Python核心知识笔记(附思维导图,建议收藏)

不少朋友在学习Python时&#xff0c;都会做大量的笔记&#xff0c;随着学习进度的增加&#xff0c;笔记越来越厚&#xff0c;但有效内容反而越来越少。 今天就给大家分享一份288页Python核心知识笔记&#xff0c;相较于部分朋友乱糟糟的笔记&#xff0c;这份笔记更够系统地总结…

【Vue3】具名插槽

【Vue3】具名插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文内…

AcWingTrie树

字典树的应用背景&#xff1a; 看以下几个题: 1、给出n个单词和m个询问&#xff0c;每次询问一个单词&#xff0c;回答这个单词是否在单词表中出现过 答:简单!map&#xff0c;短小精悍。 好。下一个 每次询问一个前缀&#xff0c;回答询问是多少个单词的前缀。2、给出n个单词和…

零基础入门转录组数据分析——机器学习算法之boruta(训练模型)

零基础入门转录组数据分析——机器学习算法之boruta&#xff08;训练模型&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之boruta&#xff08;训练模型&#xff09;1. boruta基础知识2. boruta&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理2. 2 构建…

【SQL Server】默认端口与自定义端口

目录 第4章&#xff1a;默认端口与自定义端口 SQL Server 默认端口号 更改 SQL Server 端口号 使用自定义端口的好处 示例&#xff1a;更改 SQL Server 端口为 1434 示例代码&#xff1a;更新连接字符串 安全注意事项 第4章&#xff1a;默认端口与自定义端口 SQL Serve…

只有4%知道的Linux,看了你也能上手Ubuntu桌面系统,Ubuntu简易设置,源更新,root密码,远程服务...

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 最近常提的一句话&#xff0c;那就是“但行好事&#xff0c;莫问前程"! 与辉同行的董工说​&#xff1a;​守正出奇。坚持分享&#xff0c;坚持付出&#xff0c;坚持奉献&#xff0c…

深化理解电子商务领域的“二清”风险与合规路径

在电子商务的快速发展中&#xff0c;“二清”风险成为了不容忽视的话题。这一现象不仅触及金融监管红线&#xff0c;还潜藏诸多风险&#xff0c;包括资金安全、信息泄露、合规性挑战以及监管盲点。鉴于“二清”问题的复杂性与潜在危害&#xff0c;电商平台必须采取有效措施&…

NLB快速实现IPv4服务的负载均衡

阿里云网络型负载均衡NLB&#xff08;Network Load Balancer&#xff09;支持TCP、UDP和TCPSSL协议&#xff0c;提供了强大的四层负载均衡能力。 为了实现IPv4服务的负载均衡&#xff0c;需要快速创建一个NLB实例&#xff0c;并将来自客户端的访问请求转发至后端服务器。 操作…

AI-WEB-1.0 靶机

AI-WEB-1.0 一、安装靶机环境 下载地址&#xff1a; https://www.vulnhub.com/entry/ai-web-1,353/ 下载压缩文件打开 开启虚拟机 二、信息收集 1.查看NAT模式IP段 编辑–>虚拟网络编辑器 御剑2014查IP 找到ip之后就访问网站 用扫描目录的工具扫描当前网站的目录 访问…

MongoDB change stream 详解

文章目录 什么是 Chang Streams实现原理故障恢复使用场景Spring Boot整合Chang Stream 什么是 Chang Streams Change Stream指数据的变化事件流&#xff0c;MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案&#xff0c;类…

职场进阶还是智商税?一文看六西格玛绿带培训的真面目

随着企业对精细化管理需求的日益增长&#xff0c;六西格玛绿带培训逐渐成为职场人士争相追逐的热门课程。它不仅能够帮助学员掌握先进的质量管理工具&#xff0c;还能培养逻辑思维、数据分析能力以及团队合作精神&#xff0c;这些都是现代职场不可或缺的软实力。 职场助力or智商…