v-if 导致 elementui 表单校验失效问题解决

问题

在使用 elementui 表单的过程中,某些表单项需要通过 v-if 来判断是否展示,但是这些表单项出现了检验失效的问题。

解决方法

1、给需要 v-if 判断的表单项添加 key 值

html 复制代码
<el-form ref="form" :model="form">
  <el-form-item 
    :key="0" 
    v-if="hasItem" 
    label="名称" 
    prop="type">
    <el-input v-model="form.name"></el-input>
  </el-form-item>
  <el-form-item 
    :key="1" 
    v-if="hasItem" 
    label="类型" 
    prop="type">
    <el-input v-model="form.type"></el-input>
  </el-form-item>
</el-form>

2、将校验规则直接绑定在 el-form-item 上

html 复制代码
<el-form ref="form" :model="form">
  <el-form-item 
    :rules="{required: true, message:'请输入名称', trigger: 'change'}"
    v-if="hasItem" 
    label="名称" 
    prop="name">
    <el-input v-model="form.name"></el-input>
  </el-form-item>
  <el-form-item 
    :rules="{required: true, message:'请输入类型', trigger: 'change'}"
    v-if="hasItem" 
    label="类型" 
    prop="type">
    <el-input v-model="form.type"></el-input>
  </el-form-item>
</el-form>

3、v-show 代替 v-if

这种方法存在一个问题,就是如果 v-if 判断的表单项中如果存在相同字段的项就会导致重复校验的问题,所以这种方法需要在判断的表单项字段都不相同的情况下使用。

html 复制代码
<el-form ref="form" :model="form">
  <el-form-item 
    v-show="hasItem" 
    label="名称" 
    prop="name">
    <el-input v-model="form.name"></el-input>
  </el-form-item>
  <el-form-item 
    v-show="hasItem" 
    label="类型" 
    prop="type">
    <el-input v-model="form.type"></el-input>
  </el-form-item>
</el-form>

4、使用自定义校验规则

html 复制代码
<el-form ref="form" :model="form">
  <el-form-item 
    :key="0" 
    v-if="hasItem" 
    label="名称" 
    prop="name">
    <el-input v-model="form.name"></el-input>
  </el-form-item>
  <el-form-item 
    :key="1" 
    v-if="hasItem" 
    label="类型" 
    prop="type">
    <el-input v-model="form.type"></el-input>
  </el-form-item>
</el-form>
javascript 复制代码
const checkName = (rule, value, callback) => {
	if (!value) {
       return callback(new Error('名称不能为空'));
   }
}

data(){
	return{
		rules: {
   			name: [
            	{ validator: checkName , trigger: 'change' }
          	],
        }
	}
}
相关推荐
Lin86661 分钟前
Vue 3 + TypeScript 组件类型推断失败问题完整解决方案
前端
coding随想1 分钟前
从零开始:前端开发者的SEO优化入门与实战
前端
前端工作日常4 分钟前
我理解的JSBridge
前端
Au_ust4 分钟前
前端模块化
前端
顺丰同城前端技术团队4 分钟前
还不会用 Charles?最后一遍了啊!
前端
BUG收容所所长5 分钟前
二分查找的「左右为难」:如何优雅地找到数组中元素的首尾位置
前端·javascript·算法
彬师傅5 分钟前
geojson、csv、json 数据加载
前端
用户52709648744906 分钟前
🔥 我与 ESLint 的爱恨纠葛:从"这破玩意儿"到"真香警告"
前端
梨子同志6 分钟前
手动实现 JavaScript 的 call、apply 和 bind 方法
前端·javascript
梨子同志8 分钟前
ES6 let 和 const
前端·javascript