记一次使用ElementUi框架给Form中的Table添加表单验证

news/2025/1/16 10:58:25/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、问题描述
  • 二、利用disabled属性
  • 三 、 利用el-form-item元素的required属性
  • 四 、 利用el-form-item元素rules属性
  • 总结


前言

给el-table加表单验证,一个很简单的需求。预计开发十分钟,结果用了2个半小时。


一、问题描述

简单说下我做的功能,就是配置一组表达式。表达式很简单就几种模式(大于x,小于y,介于x和y之间等)。样子如下图
在这里插入图片描述

操作效果只有3类

  • 1 没选择指标类型时,指标参数1和2都是disabled的不能输入
  • 2 选择非“介于”的指标类型时,指标参数1可以输入,指标参数2为disabled状态不能输入
  • 3 选择“介于”的指标类型时,指标参数1和2都能输入

期待的验证效果如下

  • 1 没选择指标类型时,指标参数1和2都不验证
  • 2 选择非“介于”的指标类型时。对指标参数1做非空和数字验证,指标参数2不验证
  • 3 选择“介于”的指标类型时。指标参数1和2都做非空和数字验证

问题就是如何实现期待的验证效果。一共试了三个方案

  • 1 利用disabled属性,成功入坑1
  • 2 利用el-form-item元素的required属性,成功入坑2
  • 3 利用el-form-item元素rules属性,逃出生天

二、利用disabled属性

众所周知被disabled修饰的元素,from表单不会提交。所以我认为被disabled的元素element-ui应该不会做表单验证。于是我给指标参数1和2都加了验证。打算利用disabled达到我的目的。代码如下

//添加验证规则rules: [indexParam:[{ required: true, message: "参数不能为空", trigger: "blur" },{pattern: /^\d*(\.\d+)?$/, message: "必须是数字", trigger: "blur"}]]
//规则使用
<el-table-column
label="指标参数1"width="170"><template slot-scope="scope"><el-form-item :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam1'" :rules="rules['indexParam']"><el-input :disabled="!scope.row.indexOperator" v-model="scope.row.indexParam1"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column><el-table-columnlabel="指标参数2"><template slot-scope="scope"><el-form-item :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam2'" :rules="rules['indexParam']"><el-input :disabled="scope.row.indexOperator!=='between'"  v-model="scope.row.indexParam2"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column>

结果如下
在这里插入图片描述
猜测element-ui组件应该有一个开关之类的,通过开关控制disabled属性是否验证。翻了半天官网没找到。后来又百度了会儿无果,此路不通,果断放弃。

三 、 利用el-form-item元素的required属性

在翻阅element-ui官网时,发现了required属性。
在这里插入图片描述
required如果为true证明需要做非空验证,反之不验证。这个正好是我对disabled控制的取反。一共两种情况

  • 1 required=true并且disabled=false。当前输入框可以输入,输入的内容需要做非空验证
  • 2 required=false并且disabled=true。当前输入框不能输入,输入框不做非空验证。

我猜测error应该是自定义文言的。于是我想利用这个来实现我的目标,代码如下

//添加验证规则rules: [indexParam:[{pattern: /^\d*(\.\d+)?$/, message: "必须是数字", trigger: "blur"}]]
//规则使用
<el-table-columnlabel="指标参数1"width="170"><template slot-scope="scope"><el-form-item :required="!!(scope.row.indexOperator)"   :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam1'" :rules="rules['indexParam']" error="参数不能为空"><el-input :disabled="!scope.row.indexOperator" v-model="scope.row.indexParam1"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column><el-table-columnlabel="指标参数2"><template slot-scope="scope"><el-form-item :required="!!(scope.row.indexOperator)&&scope.row.indexOperator==='between'" :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam2'" :rules="rules['indexParam']" ><el-input :disabled="scope.row.indexOperator!=='between'"  v-model="scope.row.indexParam2"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column>

结果如下,逻辑上达到了我要的效果。但是这个提示语是这样的。通过配置error也无法更改这个提示语。
在这里插入图片描述
百度了很久很久,得到的最终结果就是required对应的文言改不了。此路不通。

四 、 利用el-form-item元素rules属性

一样的思路,最终用rules属性达到了我要的效果。即
-1 disabled=false时,rules配置验证规则
-2 disabled=true时,rules不配置验证规则

代码如下

//添加验证规则rules: [indexParam:[{ required: true, message: "参数不能为空", trigger: "blur" },{pattern: /^\d*(\.\d+)?$/, message: "必须是数字", trigger: "blur"}]]
//规则使用
<el-table-columnlabel="指标参数1"width="170"><template slot-scope="scope"><el-form-item  :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam1'" :rules="!!(scope.row.indexOperator)?rules['indexParam']:{}"><el-input :disabled="!scope.row.indexOperator" v-model="scope.row.indexParam1"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column><el-table-columnlabel="指标参数2"><template slot-scope="scope"><el-form-item  :prop="'deviceAttrDtoList.'+scope.$index+'.indexParam2'" :rules="!!(scope.row.indexOperator)&&scope.row.indexOperator==='between'?rules['indexParam']:{}" style="margin-left: 0"><el-input :disabled="scope.row.indexOperator!=='between'"  v-model="scope.row.indexParam2"   placeholder="指标参数" type="text" /></el-form-item></template></el-table-column>

最终结果
在这里插入图片描述

总结

vue代码写的太少了,很多隐藏的坑自己还发现不了。慢慢积累吧


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

相关文章

JMeter 使用

一、创建全局控制器 1&#xff0c;添加---配置元器件---HTTP信息头管理&#xff0c;创建http信息头&#xff0c;参考接口中的headers中返回的参数&#xff0c;一般登陆接口都会返回&#xff0c;可通过登陆接口获取字段变量值。 2&#xff0c;添加---配置元器件--- JDBC Connec…

SpringSecurity的基础操作,登录认证,授权认证等

文章目录 SpringSecurity1、SpringSecurity简介2、第一个SpringSecurity程序3、UserDetailsService接口4、 PasswordEncoder接口5、自定义登录逻辑6、自定义登录页面7、自定义登录成功和失败处理器8、授权配置9、角色认证10、记住我11、SpringSecurity整合thymeleaf11.1、获取登…

记一次ScriptEngine引发的Matespace内存泄漏

文章目录 前言一、发现问题二、问题分析三、解决问题总结 前言 内存泄漏我之前只遇到过堆内存泄漏和栈内存泄漏。matespace内存泄漏只在demo样例代码中见过。这次有幸遇到了&#xff0c;记录下留作纪念。 一、发现问题 在排查一个诡异的bug时突然灵光一闪想到会不会是GC导致的…

诛仙哪里炼器服务器最稳定,诛仙手游炼器方法 低成本稳定全身+11炼器攻略

诛仙手游中,炼器是游戏中最值得研究的地方,那么游戏中该怎么炼器,怎么低成本稳定+11呢,下面一起来看看吧。 一,炼器准备 首先炼器最重要的是心态,心态,心态!该上不要怂!不该上就得收手!太贪连上一般都是找死! 其次是技巧和运气 炼器需要具备以下几点 1、大量的炼器符 1~…

c语言程序模块化设计,C高级编程:基于模块化设计思想的C语言开发

C高级编程&#xff1a;基于模块化设计思想的C语言开发 作者&#xff1a;吉星 著 出版日期&#xff1a;2016年05月 文件大小&#xff1a;0.76M 支持设备&#xff1a; &#xffe5;60.00在线试读 适用客户端&#xff1a; 言商书局 iPad/iPhone客户端&#xff1a;下载 Android客户…

最佳托蒂徒劳 阿森纳吉星高照

北京时间3月12日凌晨&#xff0c;2008-09赛季欧洲冠军联赛1/8决赛次回合第二比赛日打响。客场作战的阿森纳队最终在点球大战中以7比6&#xff0c;总比分8比7的成绩淘汰罗马晋级8强。以下是双方球员评分。  罗马  多尼&#xff1a;6分。面对阿森纳&#xff0c;巴西门将的发挥…

小吉星

http://www.xjx.com.cn/ 来自 “ ITPUB博客 ” &#xff0c;链接&#xff1a;http://blog.itpub.net/79716/viewspace-838/&#xff0c;如需转载&#xff0c;请注明出处&#xff0c;否则将追究法律责任。 转载于:http://blog.itpub.net/79716/viewspace-838/

ShaderJoy —— 核心仅三行代码实现酷炫特效 “吉星高照 虎年鸿运” 【GLSL】

ShaderJoy —— Shader 特效乐趣无穷 效果图 动态图 静态图 核心代码分析 话不多说,先看核心代码,我们从简单的二维坐标入手(之后再推广到三维),如下 /// @note 将屏幕坐标换算为 [-.5, .5] 的范围 vec2 p = fragCoord.xy / iResolution.xy - .5