关于 elementUI 表单中使用级联选择器时遇到的表单验证问题

在Vue.js应用中,遇到级联选择器(cascader)在调用this.$refs['cloudForm'].resetFields()后无法触发表单验证的问题。解决方法是通过自定义校验规则validator。在HTML中设置el-cascader组件,并在表单验证中定义area字段的验证规则,包括required和array类型。在自定义校验函数validArea中,检查cloudForm.area的长度来判断是否已选择地区。这个简单但实用的技巧确保了级联选择器在重置后能够正确执行验证。

先说下遇到的问题吧

表单用使用级联选择器
在使用 this.$refs['cloudForm'].resetFields();(对该表单项进行重置,将其值重置为初始值并移除校验结果 )之后,级联选择器无法触发表单验证

表单

解决方法
使用 validator自定义校验规则

html部分

<el-form-item label="地区" prop="area">
   <!-- :props="{ checkStrictly: true }" -->
  <el-cascader
    ref="cascader"
    style="width: 260px;"
    :clearable="false"
    v-model="cloudForm.area"
    :options="options"
    :props="{
      value: 'Id',
      label: 'name'
    }"></el-cascader>
</el-form-item>

表单验证

area: [
 { required: true,  validator: validArea, tirgger: 'blur' },
 { type: 'array', message: '请选择地区' }
],

自定义校验

export default {
	data () {
		// 地区选择验证
	    let validArea = (rule, value, callback) => {
	    	// 直接用value 获取不到选中的值 
	    	// 所以直接 用HTML中 v-model 绑定的值来判断 是否有值
	      if (this.cloudForm.area.length == 0) {
	        callback(new Error('请选择地区'))
	      } else {
	        callback()
	      }
	    }
		return {

		}
	}
}

很简单的一个小功能
欢迎大佬们提出更多更好的解决方案

不喜勿喷!
不喜勿喷!
不喜勿喷!

在 Vue + Element UI 的 `el-form` 表单使用 `el-cascader` 是非常常见的需求,特别是在商品类目、地区选择等场景中。 下面是一个完整的示例,展示如何在 `el-form` 中正确使用 `el-cascader`,包括数据绑定、校验规则、级联选择器的配置等。 --- ## ✅ 示例代码:在 `el-form` 中使用 `el-cascader` ```vue <template> <el-form :model="form" :rules="rules" label-width="120px" ref="formRef" > <el-form-item label="商品类目:" prop="category"> <el-cascader v-model="form.category" :options="options" :props="customProps" clearable style="width: 100%" @change="handleCascaderChange" ></el-cascader> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> <script> export default { data() { return { // 表单数据 form: { category: [] // 用于绑定 el-cascader 的选中值 }, // 级联选择器配置 customProps: { value: 'id', label: 'name', children: 'children' }, // 级联数据源 options: [ { id: 1, name: '电子产品', children: [ { id: 2, name: '手机', children: [ { id: 3, name: 'iPhone' }, { id: 4, name: '华为' } ] }, { id: 5, name: '电脑', children: [ { id: 6, name: 'MacBook' }, { id: 7, name: 'ThinkPad' } ] } ] }, { id: 8, name: '图书', children: [ { id: 9, name: '小说' }, { id: 10, name: '技术书籍' } ] } ], // 表单校验规则 rules: { category: [ { required: true, message: '请选择商品类目', trigger: 'change' } ] } }; }, methods: { // 提交表单 submitForm() { this.$refs.formRef.validate(valid => { if (valid) { console.log('表单数据:', this.form); alert('提交成功'); } else { console.log('校验失败'); return false; } }); }, // 级联选择器 change 事件 handleCascaderChange(value) { console.log('选中值:', value); } } }; </script> ``` --- ## 📌 说明: ### 1. `el-form` 表单结构 - 使用 `:model="form"` 绑定整个表单的数据对象 - 使用 `:rules="rules"` 定义校验规则 - 使用 `ref="formRef"` 获取表单实例,用于调用 `validate()` 方法 ### 2. `el-cascader` 使用说明 - `v-model="form.category"`:绑定选中值,通常是一个数组,如 `['电子产品', '手机', 'iPhone']` - `:options="options"`:定义级联数据源 - `:props="customProps"`:用于字段映射(如 `value: 'id'`, `label: 'name'`) - `@change="handleCascaderChange"`:当选中值变化触发 ### 3. 数据结构 `options` ```js [ { id: 1, name: '电子产品', children: [ { id: 2, name: '手机', children: [ { id: 3, name: 'iPhone' }, { id: 4, name: '华为' } ] } ] } ] ``` --- ## ✅ 常见问题排查 | 问题 | 解决方法 | |------|----------| | `options` 报错未定义 | 确保 `options` 在 `data()` 中定义 | | 级联选择器不显示 | 检查 `customProps` 的字段是否与 `options` 匹配 | | 表单无法校验 | 检查 `prop="category"` 是否与 `form.category` 一致 | | 异步加载数据失败 | 初始化 `options` 为 `[]`,在 `mounted` 或 `created` 中异步赋值 | --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值