vue使用rules实现表单字段验证

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

vue使⽤rules实现表单字段验证
vue中表单字段验证的写法和⽅式有多种,本博客介绍三种较为常⽤的验证⽅式。

1. 写在 data 中验证
表单内容
<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="⽤户名称:" prop="userName">
<el-input v-model="erName" style="width:300px" maxlength="50"/>
</el-form-item>
</el-form>
<el-form>:代表这是⼀个表单
<el-form> -> ref:表单被引⽤时的名称,标识
<el-form> -> rules:表单验证规则
<el-form> -> model:表单数据对象
<el-form> -> label-width:表单域标签的宽度,作为 Form 直接⼦元素的 form-item 会继承该值
<el-form> -> <el-form-item>:表单中的每⼀项⼦元素
<el-form-item> -> label:标签⽂本
<el-form-item> -> prop:表单域 model 字段,在使⽤ validate、resetFields ⽅法的情况下,该属性是必填的<el-input>:输⼊框
<el-input> -> v-model:绑定的表单数据对象属性
<el-input> -> style:⾏内样式
<el-input> -> maxlength:最⼤字符长度限制
data 数据
data() {
return {
// 省略别的数据定义
...
// 表单验证
formRules: {
userName: [
{required: true,message: "请输⼊⽤户名称",trigger: "blur"}
]
}
}
}
formRules:与上⽂ '表单内容' 中 <el-form> 表单的 :rules 属性值相同
userName:与上⽂ '表单内容' 中 <el-form-item> 表单⼦元素的 prop 属性值相同
验证内容是:必填,失去焦点时验证,如果为空,提⽰信息为 '请输⼊⽤户名称'
2. 写在⾏内
表单内容
<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="银⾏名称:" prop="accountName" :rules="[{required:true,message:'请输⼊银⾏名称',trigger:'blur'}]">
<el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
</el-form-item>
</el-form>
<el-form-item> -> rules:和第⼀种⽅式表现的效果⼀致,只是写法不⼀样,这⾥不再赘述
data 数据没有内容
3. 引⼊外部定义的规则
表单内容
<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="银⾏卡号:" prop="accountNumber">
<el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="19"/>
</el-form-item>
</el-form>
表单内容与第⼀种⽅式写法⼀致,这⾥不再赘述
script 内容
<script>
// 引⼊了外部的验证规则
import { validateAccountNumber } from "@/utils/validate";
// 判断银⾏卡账户是否正确
const validatorAccountNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输⼊账户信息"));
} else {
if (validateAccountNumber(value)) {
callback();
} else {
return callback(new Error('账号格式不正确'))
}
}
};
export default {
data() {
return {
// 省略别的数据定义
...
// 表单验证
formRules: {
accountNumber: [
{required: true,validator: validatorAccountNumber,trigger: "blur"}
]
}
}
}
}
</script>
import:先引⼊了外部的验证规则
const:定义⼀个规则常量,常量名可变, '= (rule, value, callback) => {}' 为固定格式,value ⼊参为验证的字段值formRules -> accountNumber:表单验证中使⽤ validator 指定⾃定义校验规则常量名称
validate.js
/* 银⾏账户 */
export function validateAccountNumber(str) {
const reg = /^([1-9]{1})(\d{14}|\d{18})$/
return reg.test(str)
}
验证规则
以上都是在失去焦点时的验证,下⾯来分析⼀下如何在表单提交时验证
1. 表单的提交按钮
<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item>
<el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
<el-button @click="cancel">取消</el-button>
</el-form-item>
</el-form>
<el-button>:按钮
<el-button> -> type:按钮类型
<el-button> -> @click:按钮点击时触发的事件,这⾥注意⽅法的⼊参为 'rulesForm',这⾥要与 <el-form> 表单的 rel 属性值⼀致
2. methods ⽅法
methods: {
// 保存
onSubmit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log("success submit!!");
}else{
console.log("error submit!!");
}
});
},
// 取消
cancel() {
}
}
this.$refs[formName].validate:formName 就是传⼊的 'rulesForm',与 <el-form> 表单的 rel 属性值⼀致,这样就指定好需要验证的表单了
完整⽰例代码如下
1. rules.vue
<template>
<div class="app-container">
<el-tabs v-model="activeName">
<el-tab-pane label="表单" name="rulesPane" @tab-click="handleClick">
<!-- 表单 -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
<el-form-item label="⽤户名称:" prop="userName">
<el-input v-model="erName" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item label="银⾏名称:" prop="accountName" :rules="[{required:true,message:'请输⼊银⾏名称',trigger:'blur'}]">
<el-input v-model="rulesForm.accountName" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item label="银⾏卡号:" prop="accountNumber">
<el-input v-model="rulesForm.accountNumber" style="width:300px" maxlength="50"/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
<el-button @click="cancel">取消</el-button>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { validateAccountNumber } from "@/utils/validate";
// 判断银⾏卡账户是否正确
const validatorAccountNumber = (rule, value, callback) => {
if (!value) {
return callback(new Error("请输⼊账户信息"));
} else {
if (validateAccountNumber(value)) {
callback();
} else {
return callback(new Error('账号格式不正确'))
}
}
};
export default {
name: "rules",
data() {
return {
activeName: "rulesPane",
defaultProps: {
children: "children",
label: "label"
},
rulesForm: {
},
// 表单验证
formRules: {
userName: [
{
required: true,
message: "请输⼊⽤户名称",
trigger: "blur"
}
],
accountNumber: [
{
required: true,
validator: validatorAccountNumber,
trigger: "blur"
}
],
}
};
},
created() {},
mounted() {},
methods: {
handleClick(tab) {
},
// 取消
cancel() {
},
// 保存
onSubmit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
console.log("success submit!!");
} else {
console.log("error submit!!");
return false;
}
});
}
}
};
</script>
<style lang="scss">
</style>
2. validate.js
/* 银⾏账户 */
export function validateAccountNumber(str) {
const reg = /^([1-9]{1})(\d{14}|\d{18})$/
return reg.test(str)
}
效果图
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

相关文档
最新文档