概述
el-form表单校验与v-if使用时表单校验失效
表单校验注意事项
1、model
el-form
标签上的属性:model
要绑定表单数据的数据对象
2、rules
el-form
标签上的属性:rules
要绑定表单校验规则的对象
el-form-item
标签的prop
属性要对应rules
绑定对象的属性注意:
rules
绑定对象的属性最好是存在于:model
绑定对象的属性
3、ref
获取该表单DOM结构,可以调用validate方法来校验表单
方法一:使用传参的形式
// formName为el-from绑定的ref
formValidate(formName){
this.$refs[formName].validate((valid)=>{
// valid 是表单校验的结果 valid:Boolean
})
}
// 调用
<button @click='formValidate('formName')'></button>
方法二:不传参,直接获取
formValidate(){
// formName为el-from绑定的ref
this.$refs.formName.validate((valid)=>{
// valid 是表单校验的结果 valid:Boolean
})
}
4、
el-form
或el-form-item
与v-if
一起使用的时候需要注意加key
值
下面是本人踩过的坑,希望可以帮助大家
图一:这是没有给表单加key
值的时候,表单校验失效
图二:这是给表单加上key
值的时候,表单校验就可以了
代码如下:
<!-- 这是第一个el-form -->
<template>
<el-form
:model="mailVerify"
:rules="mailRules"
ref="mailVerify"
key="mailVerify" ------------重点key
v-if="step === 2"
>
<el-form-item style="margin-bottom: 10px">
<div class="title">
<span>找回密码</span>
</div>
</el-form-item>
<el-form-item>
<el-button class="login-btn" type="primary" @click="secondNext('mailVerify')"
>下一步</el-button
>
</el-form-item>
</el-form>
<!-- 这是第二个el-form -->
<el-form
:model="newPwd"
:rules="newPwdRules"
ref="newPwd"
key="newPwd" ----------重点key
v-if="step === 3"
>
<el-form-item style="margin-bottom: 10px">
<div class="title">
<span>找回密码</span>
</div>
</el-form-item>
<el-form-item prop="password">
<span>设置新密码</span>
<el-input
v-model="newPwd.password"
placeholder="新密码"
type="password"
></el-input>
</el-form-item>
<el-form-item prop="rePassword">
<el-input
v-model="newPwd.rePassword"
></el-input>
</el-form-item>
<el-form-item>
<el-button class="login-btn" type="primary" @click="newPwdConfirm('newPwd')"
>确认</el-button
>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
var validatePass = (rule, value, callback) => {
if (value == "") {
console.log("新密码位空!");
callback(new Error("请输入密码"));
} else {
callback();
}
};
var validatePass2 = (rule, value, callback) => {
if (value === "") {
console.log("再次输入密码");
callback(new Error("请再次输入密码"));
} else if (value !== this.newPwd.password) {
console.log("两次输入不一致");
callback(new Error("两次输入密码不一致!"));
} else {
callback();
}
};
var validMail = (rule, value, callback) => {
let reg =
/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*.[a-zA-Z0-9]{2,6}$/;
if (!reg.test(value)) {
callback(new Error("请输入正确的邮箱"));
} else {
callback();
}
};
return {
step: 1,
mailVerify: {
mail: "",
},
mailRules: {
mail: [
{ required: true, message: "请输入电子邮箱", trigger: "blur" },
{ validator: validMail, trigger: ["blur", "change"] },
],
},
newPwd: {
password: "",
rePassword: "",
},
// 新密码的校验规则
newPwdRules: {
password: [
{ validator: validatePass, trigger: "blur" },
],
rePassword: [{ validator: validatePass2, trigger: "blur" }],
},
// 修改结果信息
result: {
icon: "success",
title: "操作成功",
subTitle: "新密码已经设置成功!",
},
};
},
methods: {
secondNext(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
console.log("邮箱格式正确");
this.step++;
} else {
console.log("邮箱格式失败");
}
});
},
// 设置新密码确定
newPwdConfirm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.step++;
console.log("校验成功!");
} else {
console.log("校验失败!");
}
});
},
};
</script>
最后
以上就是落后方盒为你收集整理的el-form表单校验与v-if使用时表单校验失效的全部内容,希望文章能够帮你解决el-form表单校验与v-if使用时表单校验失效所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复