给个小鲜肉,你就能包揽表单开发的活
2023-10-09 00:52:25
本人使用el-form组件开发表单编辑场景已有一年之余,先后基于el-form组件几次封装了动态表单组件,封装的动态表单组件说白了就是预先写了一套全量的form模版,并内置了基础的校验逻辑,增加了一些定制的插槽,这样使用动态表单组件的时候,可以传入配置项来选择性的加载想要的基础表单控件,减少大量的代码,加速开发进度。
el-form表单编写虽然简单,但只有经历项目考验之后,我们才会知道他的真正缺点,本人在之前写过一篇文章,讲解el-form表单使用中遇到的问题及其解决方案,文章链接:
el-form表单使用
el-form
表单组件是Element UI
中常用的组件之一,它提供了强大的表单功能,支持多种表单元素,并具有良好的可定制性。
基本用法
el-form
表单组件的基本用法非常简单,只需要在表单元素的父元素上添加el-form
属性,并指定表单的model
,即可实现表单数据的双向绑定。
<el-form :model="form">
<el-input v-model="form.username" placeholder="请输入用户名"></el-input>
<el-input v-model="form.password" placeholder="请输入密码" type="password"></el-input>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form>
表单校验
el-form
表单组件还支持表单校验功能,可以通过rules
属性来指定表单元素的校验规则。
<el-form :model="form" :rules="rules">
<el-input v-model="form.username" placeholder="请输入用户名"></el-input>
<el-input v-model="form.password" placeholder="请输入密码" type="password"></el-input>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form>
const rules = {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 3, max: 15, message: '用户名长度必须在3到15个字符之间', trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 18, message: '密码长度必须在6到18个字符之间', trigger: 'blur' }
]
}
表单提交
el-form
表单组件还支持表单提交功能,可以通过@submit
事件监听表单的提交事件。
<el-form :model="form" @submit="submitForm">
<el-input v-model="form.username" placeholder="请输入用户名"></el-input>
<el-input v-model="form.password" placeholder="请输入密码" type="password"></el-input>
<el-button type="primary" @click="submitForm">提交</el-button>
</el-form>
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
// 表单验证通过,提交表单
this.$message({
message: '提交成功',
type: 'success'
})
} else {
// 表单验证不通过,提示用户
this.$message({
message: '表单验证不通过',
type: 'error'
})
}
})
}
el-form表单使用中的问题及其解决方案
表单元素的校验不准确
在使用el-form
表单组件进行表单校验时,可能会遇到表单元素的校验不准确的问题。
原因是:el-form
表单组件的表单校验功能是基于浏览器的原生校验功能实现的,而浏览器的原生校验功能并不完善,可能存在一些不准确的问题。
解决方案:
-
可以使用第三方表单校验库来实现更准确的表单校验,例如:
vee-validate
库。 -
可以通过在表单元素上添加
data-rule
属性来指定自定义的校验规则,然后在表单提交时,通过JavaScript代码来校验表单元素是否符合自定义的校验规则。
表单提交后,页面没有刷新
在使用el-form
表单组件进行表单提交后,可能会遇到页面没有刷新的问题。
原因是:el-form
表单组件的表单提交功能是基于ajax
技术实现的,ajax
技术可以实现表单数据的异步提交,不会导致页面刷新。
解决方案:
-
可以通过在表单的
submit
事件中,添加preventDefault()
方法来阻止表单的默认提交行为,然后通过JavaScript代码来实现表单数据的异步提交。 -
可以通过在表单的
action
属性中指定一个页面地址,然后在表单提交时,浏览器会自动跳转到指定的页面地址,从而实现页面刷新。
我封装的组件及使用手册
个人项目中我自行封装了动态表单组件,封装后的组件及使用手册已放到码云平台:
码云仓库地址:https://gitee.com/JeffLeeLee/form-kit
总结
el-form
表单组件是一个非常强大的组件,它可以满足我们大部分的表单开发需求。但是在使用el-form
表单组件时,我们也可能会遇到一些问题。
本文介绍了el-form
表单组件的基本用法、表单校验和表单提交的功能,以及在使用el-form
表单组件时可能会遇到的问题及其解决方案。
希望本文能够帮助大家更好地使用el-form
表单组件。