使用iview的select组件配合Form表单验证时,验证不通过

一、问题重现

在这里插入图片描述
在这里插入图片描述
如上图,实际上已经选择了,但是还是有校验不通过的错误提示

二、问题分析

首先了解一下iview的校验库规定的校验规则,如下图:
在这里插入图片描述
从上面的规则中可以看出,如果我们不添加type来限定类型,则默认类型就是 string,但是一般的需求是option的value都是类似于id这种唯一标识,所以有可能会出现number/string。可恶的是有时候我们即使指定了type: ‘string’,依然校验不过,接着看文档说明,文档中还针对校验字段转换的做了说明,就是针对transform属性的说明,如下图:
在这里插入图片描述

  • 第一部分是说,有时有必要在校验前转换值,可能是强制该值或以某种方式对其进行处理。因此需要在校验规则中添加一个转换函数。在校验之前对属性进行转换,并将其重新分配给源对象,以更改现有属性的值。
  • 第二部分是说,如果没有转换函数,校验时将会由于模式不匹配而失败,因为输入的内容包含前置行距和尾空格,但是通过添加转换函数,校验会便通过,同时字段值会被清除。

三、问题解决

糙代码一坨:

<template>
	<div>
		 <Form :model="supplier" :rules="rule" :label-width="120" ref="supplierForm">
		 	<FormItem label="支撑区域:" prop="supportAreaCodes">
			    <Select v-model="supplier.supportAreaCodes" multiple>
			        <Option v-for="item in supportAreaCodeList" :value="item.id" :key="item.id">{{ item.name }}</Option>
			    </Select>
			</FormItem>
			...
		 </Form>
		 ...
	</div>
</template>

<script>
	export default {
	    data() {
	        return {
				// ...... 千言万语,就不写了
	            rule: {
	            	// transform: (value) => String(value) 是重点
					supportAreaCodes: [{transform: (value) => String(value),required: true, message: '不能为空!', trigger: 'blur'}]
				}
	        }
	    }
	}
</script>	

如下图,转换后,可以正常校验了:
在这里插入图片描述

四、总结

问题不大,但是不得不说,个人不太喜欢iview这个库,个人觉得文档还不够清晰,不建议一些页面数据加载较多且响应速度要求较高的项目使用,实际上一些细节处理的也并不优雅,不要问为什么,想知道为什么,就先熟练使用它!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值