(el-Form)操作(不使用 ts):Element-plus 中 Form 表单组件校验规则等的使用

Ⅰ、Element-plus 提供的 Form 表单组件与想要目标情况的对比:

1、Element-plus 提供 Form 表单组件情况:

其一、Element-plus 自提供的 Form 代码情况为(示例的代码):

在这里插入图片描述


// Element-plus 自提供的代码:
// 此时是使用了 ts 语言环境,但是我在实际项目中并没有使用 ts 语言和环境;<template><el-formref="ruleFormRef":model="ruleForm"status-icon:rules="rules"label-width="120px"class="demo-ruleForm"><el-form-item label="Password" prop="pass"><el-input v-model="ruleForm.pass" type="password" autocomplete="off" /></el-form-item><el-form-item label="Confirm" prop="checkPass"><el-inputv-model="ruleForm.checkPass"type="password"autocomplete="off"/></el-form-item><el-form-item label="Age" prop="age"><el-input v-model.number="ruleForm.age" /></el-form-item><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)">Submit</el-button><el-button @click="resetForm(ruleFormRef)">Reset</el-button></el-form-item></el-form>
</template><script lang="ts" setup>
import { reactive, ref } from 'vue'
import type { FormInstance, FormRules } from 'element-plus'const ruleFormRef = ref<FormInstance>()const checkAge = (rule: any, value: any, callback: any) => {if (!value) {return callback(new Error('Please input the age'))}setTimeout(() => {if (!Number.isInteger(value)) {callback(new Error('Please input digits'))} else {if (value < 18) {callback(new Error('Age must be greater than 18'))} else {callback()}}}, 1000)
}const validatePass = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('Please input the password'))} else {if (ruleForm.checkPass !== '') {if (!ruleFormRef.value) returnruleFormRef.value.validateField('checkPass', () => null)}callback()}
}
const validatePass2 = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('Please input the password again'))} else if (value !== ruleForm.pass) {callback(new Error("Two inputs don't match!"))} else {callback()}
}const ruleForm = reactive({pass: '',checkPass: '',age: '',
})const rules = reactive<FormRules<typeof ruleForm>>({pass: [{ validator: validatePass, trigger: 'blur' }],checkPass: [{ validator: validatePass2, trigger: 'blur' }],age: [{ validator: checkAge, trigger: 'blur' }],
})const submitForm = (formEl: FormInstance | undefined) => {if (!formEl) returnformEl.validate((valid) => {if (valid) {console.log('submit!')} else {console.log('error submit!')return false}})
}const resetForm = (formEl: FormInstance | undefined) => {if (!formEl) returnformEl.resetFields()
}
</script>

代码地址(直接点击下面 url 跳转):https://element-plus.gitee.io/zh-CN/component/form.html#自定义校验规则

其二、页面的显示情况为:

在这里插入图片描述

2、目标想修改后的情况:

// 此时虽然页面的样式有些变化,但实际上的用 form 语法或校验规则等都是没有变化的;

在这里插入图片描述

Ⅱ、实现 Form 表单组件达到目标效果变化的过程:

1、 Form 表单组件成功引入 vue3 项目的过程(去除了 ts 的语法):

其一、代码(以 age 为例):

<script setup>import {ref} from 'vue'const ruleFormRef = ref(null)   // 注意:一定要定义 form 表单中 ref 的 ruleFormRef 的值,否则会一直报错;const ruleForm = ref({pass: "",checkPass: "",age: '',// size: '4000',// ip: '0.0.0.0'
})// 重置的操作;
const resetForm = (val) => {debuggerif (!val) returnval.resetFields()  // resetFields 函数:是将表单字段的值重置为其默认值;
}// age 的规则是:让 age 的值,不能为空,为数字,且数字值不小于 18;
const checkAge = (rule, value, callback) => {if (!value) {  // 此时是判空,如果 age 中为空,就抛出该提示信息;return callback(new Error('Please input the age'))}setTimeout(() => {if (!Number.isInteger(value)) {   // 此时是:判断 age 中输入的值是否是数字,如果不是数字就抛出该提示信息;callback(new Error('Please input digits'))} else {if (value < 18) { // 此时是:判断 age 中输入的数字是否小于 18,如果小于 18,就抛出该提示信息;callback(new Error('Age must be greater than 18'))} else {callback()}}}, 1000)
}// 注意:在 rules 方法中 validator 属性后面的方法,一定要定义在 rules 函数前,否则会报错;
const rules = ref({age: [{ validator: checkAge, trigger: 'blur' }],
})// 此时是:提交表单的操作;
const submitForm = () => {if (!ruleFormRef.value) returnruleFormRef.value.validate((valid) => {  // 注意:此时使用的是 ruleFormRef.value,而仅写 ruleFormRef 是拿不到值且会报错的;if (valid) {   // 注意:只有当所有的规则都满足后,此时的 valid 的值才为 true,才能执行下面的值;console.log('submit!')} else {console.log('error submit!')return false}})
}</script><template><div class="project_background"><div class="my_project"><el-formref="ruleFormRef":model="ruleForm"status-icon:rules="rules"label-width="80px"class="demo-ruleForm"><el-form-item label="Password" prop="pass"><el-input v-model="ruleForm.pass" type="password" autocomplete="off" /></el-form-item><el-form-item label="Confirm" prop="checkPass"><el-input v-model="ruleForm.checkPass" type="password" autocomplete="off"/></el-form-item><el-form-item label="Age" prop="age"><el-input v-model.number="ruleForm.age" /></el-form-item><!-- <el-form-item label="大小" prop="log_size"><el-tooltip class="box-item" effect="light" content="请填写 500 到 4000 的数" placement="top"><el-input v-model="ruleForm.size" placeholder="请输入"/></el-tooltip></el-form-item><el-form-item label="IP" prop="log_service_ip"><el-tooltip class="box-item" effect="light" content="请填写合法的 ip 地址" placement="top"><el-input v-model="ruleForm.ip" placeholder="请输入"/></el-tooltip></el-form-item>  --><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)"><el-icon :size="20" style="margin-right: 5px;"><CircleCheckFilled /></el-icon>Submit</el-button><el-button @click="resetForm(ruleFormRef)">Reset</el-button></el-form-item></el-form></div></div>
</template><style lang="scss" scoped>.project_background {margin: 30px auto;background-color: #e6f1f9;box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 40px 0px;.my_project {margin: 20px;}}
</style>

其二、效果展示:

A、输入的值不是数字会报错:

在这里插入图片描述
B、输入的值的小于 18 也会报错:

在这里插入图片描述
C、只有正确的值才能成功提交:

在这里插入图片描述

Ⅲ、修改 Form 表单组件达到目标效果的展示:

1、整体的代码(即:总的代码):


// 此时是去除 ts 的 Element-plus 组件的 vue3 语法的代码:<script setup>import {ref} from 'vue'const ruleFormRef = ref(null)   // 注意:一定要定义 form 表单中 ref 的 ruleFormRef 的值,否则会一直报错;const ruleForm = ref({pass: "",checkPass: "",age: ''
})// 重置的操作;
const resetForm = (val) => {debuggerif (!val) returnval.resetFields()  // resetFields 函数:是将表单字段的值重置为其默认值;
}// Password 的规则是:让 Password 的输入值,不能为空,且若 Confirm 的输入值不为空时,在 Password 的输入值后在执行一遍 Confirm 的规则;
const validatePass = (rule, value, callback) => {if (value === '') {  // 此时是判空,如果 Password 中为空,就抛出该提示信息;callback(new Error('Please input the password'))} else {if (ruleForm.value.checkPass !== '') {  // 此时是:判断 Confirm 输入的值是否为空;if (!ruleFormRef.value) return  // 只要 Confirm 中有输入,此时的 !ruleFormRef.value 的布尔值为 false;ruleFormRef.value.validateField('checkPass', () => null) // validateField 是用于对表单中的字段进行验证的方法,来确保数据的正确性;// 个人理解是:在 Confirm 中有输入与 Password 的输入对比的操作,因此可以理解为:对 'checkPass'(即:Confirm)// 进行监听,即:有执行了一遍 Confirm 的验证(确定:通过 debugger 验证了猜想);}callback()}
}// Confirm 的规则是:让 Confirm 的输入值,不能为空,且与 Password 的输入值要保持一致;
const validatePass2 = (rule, value, callback) => {if (value === '') {  // 此时是判空,如果 Confirm 中为空,就抛出该提示信息;callback(new Error('Please input the password again'))} else if (value !== ruleForm.value.pass) { // 此时是:判断 Confirm 输入的值是否与 Password 输入的值相同,若不相同,就抛出该提示信息;callback(new Error("Two inputs don't match!"))} else { // 只有 Confirm 输入的值与 Password 输入的值相同,才没问题(前提是:Passwork 与 Confirm 中都有值);callback()}
}// age 的规则是:让 age 的值,不能为空,为数字,且数字值不小于 18;
const checkAge = (rule, value, callback) => {if (!value) {  // 此时是判空,如果 age 中为空,就抛出该提示信息;return callback(new Error('Please input the age'))}setTimeout(() => {if (!Number.isInteger(value)) {   // 此时是:判断 age 中输入的值是否是数字,如果不是数字就抛出该提示信息;callback(new Error('Please input digits'))} else {if (value < 18) { // 此时是:判断 age 中输入的数字是否小于 18,如果小于 18,就抛出该提示信息;callback(new Error('Age must be greater than 18'))} else {callback()}}}, 1000)
}// 注意:在 rules 方法中 validator 属性后面的方法,一定要定义在 rules 函数前,否则会报错;
const rules = ref({// form 表单前面有没有小红星,取决于有没有 'required: true' 的属性,如果有这个属性页面就有小红星,而没有这个属性就没有小红星;pass: [{ required: true, validator: validatePass, trigger: 'blur' }],checkPass: [{ validator: validatePass2, trigger: 'blur' }],age: [{ validator: checkAge, trigger: 'blur' }],
})// 此时是:提交表单的操作;
const submitForm = () => {if (!ruleFormRef.value) returnruleFormRef.value.validate((valid) => {  // 注意:此时使用的是 ruleFormRef.value,而仅写 ruleFormRef 是拿不到值且会报错的;if (valid) {   // 注意:只有当所有的规则都满足后,此时的 valid 的值才为 true,才能执行下面的值;console.log('submit!')} else {console.log('error submit!')return false}})
}</script><template><div class="project_background"><div class="my_project"><el-formref="ruleFormRef":model="ruleForm"status-icon:rules="rules"label-width="80px"class="demo-ruleForm"><el-form-item label="Password" prop="pass"><el-input v-model="ruleForm.pass" type="password" autocomplete="off" /></el-form-item><el-form-item label="Confirm" prop="checkPass"><el-input v-model="ruleForm.checkPass" type="password" autocomplete="off"/></el-form-item><el-form-item label="Age" prop="age"><el-input v-model.number="ruleForm.age" /></el-form-item><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)"><el-icon :size="20" style="margin-right: 5px;"><CircleCheckFilled /></el-icon>Submit</el-button><el-button @click="resetForm(ruleFormRef)">Reset</el-button></el-form-item></el-form></div></div>
</template><style lang="scss" scoped>.project_background {margin: 30px auto;background-color: #e6f1f9;box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 40px 0px;.my_project {margin: 20px;}}
</style>

2、整体效果的展示:

在这里插入图片描述

Ⅳ、小结:

其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!
其二、若有转发或引用本文章内容,请注明本博客地址(直接点击下面 url 跳转) https://blog.csdn.net/weixin_43405300,创作不易,且行且珍惜!
其三、有兴趣的话,可以多多关注这个专栏(Vue(Vue2+Vue3)面试必备专栏)(直接点击下面 url 跳转):https://blog.csdn.net/weixin_43405300/category_11525646.html?spm=1001.2014.3001.5482

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

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

相关文章

心法利器[90-95] | 谈校招:合集

心法利器 本栏目主要和大家一起讨论近期自己学习的心得和体会&#xff0c;与大家一起成长。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。 2022年新一版的文章合集已经发布&#xff0c;累计已经60w字了&#xff0c;获取方式看这里&…

【ROS】fsd_algorithm架构学习与源码分析(致敬)

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍fsd_algorithm架构学习与源码分析。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&am…

Prometheus技术文档-概念

Prometheus是一个开源的项目连接如下&#xff1a; Prometheus首页、文档和下载 - 服务监控系统 - OSCHINA - 中文开源技术交流社区 基本概念&#xff1a; Prometheus是一个开源的系统监控和告警系统&#xff0c;由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种…

绕过 open_basedir

目录 0x01 首先了解什么是 open_basedir 0x02 通过命令执行绕过 0x03 通过symlink 绕过 &#xff08;软连接&#xff09; 0x04利用glob://绕过 方式1——DirectoryIteratorglob:// 方式2——opendir()readdir()glob:// 0x05 通过 ini_set和chdir来绕过 在ctfshow 72遇到…

docker复现nginx错误配置漏洞

目录 一、nginx环境搭建 1.1搭建步骤 二、docker复现Nginx配置漏洞 2.1安装docker 2.2复现过程 2.1CRLF(carriage return/line feed)注入漏洞 2.2.目录穿越 一、nginx环境搭建 1.1搭建步骤 1.先创建Nginx的目录并进入&#xff08;命令如下&#xff09; mkdir /soft &&…

Sui网络的稳定性和高性能

Sui的最初的协议开发者设计了可扩展的网络&#xff0c;通过水平扩展的方式来保持可负担得起的gas费用。其他区块链与之相比&#xff0c;则使用稀缺性和交易成本来控制网络活动。 Sui主网上线前90天的数据指标证明了这一设计概念&#xff0c;在保持100&#xff05;正常运行的同…

HTTP代理编程:Python实用技巧与代码实例

今天我要与大家分享一些关于HTTP代理编程的实用技巧和Python代码实例。作为一名HTTP代理产品供应商&#xff0c;希望通过这篇文章&#xff0c;帮助你们掌握一些高效且实用的编程技巧&#xff0c;提高开发和使用HTTP代理产品的能力。 一、使用Python的requests库发送HTTP请求&a…

第01天 什么是CSRF ?

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 每天一个知识点 ✨特色专栏&#xff1…

【论文阅读】基于深度学习的时序预测——Crossformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

前沿分享-鱼形机器人

可能并不太前沿了&#xff0c;是21年底的新闻了&#xff0c;但是看见了就顺便发一下吧。 大概就是&#xff0c;通过在pH响应型水凝胶中编码不同的膨胀速率而构建了一种环境适应型变形微机器人,让微型机器人直接向癌细胞输送药物从而减轻药物带来副作用。 技术原理是&#xff0c…

关于三维模型OSGB格式轻量化压缩出现分层现象分析

关于三维模型OSGB格式轻量化压缩出现分层现象分析 三维模型OSGB格式的轻量化压缩分层现象是指在进行几何压缩和纹理压缩过程中&#xff0c;由于不同部位的信息复杂度存在差异&#xff0c;可能会出现某些部位被处理过度&#xff0c;导致其失去了细节和质感的现象。本文将从几何…

OpenGL纹理

纹理采样器----纹理坐标 只有纹理坐标&#xff0c;纹理没有作用。 纹理坐标是在顶点着色器中设置&#xff0c;需要传入片段着色器&#xff0c;在片段着色器中需要定义纹理采样器。 然后调用texture函数利用采样器和纹理坐标对纹理进行采样。 我们使用GLSL内建的texture函数…