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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下遇到的问题吧

表单用使用级联选择器
在使用 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.js 和 Element UI 的表单级联选择器实现方式。 #### 1. 级联选择器的基本结构 级联选择器的核心是通过 `el-cascader` 组件来实现。它允许用户从多级选项中进行选择,并支持动态加载数据。以下是基本的 HTML 结构和配置: ```html <el-form-item label="上级部门" prop="parentId"> <div class="example-block"> <el-cascader :options="alldept" :props="props" v-model="form1.parentId" clearable> </el-cascader> </div> </el-form-item> ``` 上述代码中,`el-cascader` 是核心组件,`options` 属性用于定义选项数据,`props` 属性用于配置选项的行为[^1]。 #### 2. 数据源配置 `options` 属性需要一个数组作为数据源,每个元素表示一级选项。以下是一个示例数据结构: ```javascript const alldept = [ { value: 'department1', label: '部门1', children: [ { value: 'subdepartment1', label: '子部门1' }, { value: 'subdepartment2', label: '子部门2' } ] }, { value: 'department2', label: '部门2' } ]; ``` #### 3. 配置项 `props` `props` 属性可以自定义级联选择器的行为,例如指定值字段、标签字段等。以下是一个示例配置: ```javascript const props = { value: 'value', // 指定节点值为节点对象的某个属性值 label: 'label', // 指定标签为节点对象的某个属性值 children: 'children' // 指定子树为节点对象的某个属性值 }; ``` #### 4. 表单验证 为了确保用户正确填写表单,可以使用 `el-form` 提供的验证功能。以下是一个示例验证规则: ```javascript rules: { parentId: [ { required: true, message: '请选择上级部门', trigger: 'change' }, { type: 'array', message: '请选择一个部门', trigger: 'blur' } ] } ``` 上述规则中,`required: true` 表示该字段为必填项,`type: 'array'` 表示验证值必须是一个数组[^2]。 #### 5. 动态加载数据 如果数据量较大,可以通过 `lazy` 属性启用懒加载功能。以下是一个示例: ```html <el-cascader :options="alldept" :props="props" v-model="form1.parentId" lazy :lazy-load="loadData"> </el-cascader> ``` 对应的 `loadData` 方法如下: ```javascript function loadData(node, resolve) { if (node.level === 0) { return resolve([ { value: 'department1', label: '部门1' }, { value: 'department2', label: '部门2' } ]); } setTimeout(() => { resolve([ { value: 'subdepartment1', label: '子部门1' }, { value: 'subdepartment2', label: '子部门2' } ]); }, 1000); } ``` #### 6. 注意事项 - 确保 `options` 数据结构正确,每一级选项都应包含 `value` 和 `label` 字段。 - 如果需要动态加载数据,确保 `lazy-load` 方法返回正确的子选项。 - 在表单验证中,`trigger` 属性决定了触发验证的机,可以选择 `blur` 或 `change`。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值