ElementUI Form校验时有值却报为空的问题
今天遇到了一个问题,在 ElementUI 里的一个 Form,对其中一个 Input 字段设置了校验 Required 之后,从空值输入一个值不会报错,而在已经有值去更新别的字段时,这个值会校验为空,记录一下问题原因。
这个字段是一个带小数的数字,但因为 ElementUI 的 Input 框不支持 :v-model.number
这一写法在末尾加小数点(Issues) ,只能把这个字段当成普通的 string 来处理。
然而这个问题报错的原因即是如此,新增时,字段以 string 类型更新到后台;更新时,后台返回前端时则是 int 类型,而这个字段恰好又校验了类型:{ type: 'string', required: true, message: '费率为必填项', trigger: ['blur', 'change'] }
,那么自然会出错。
经过尝试,有两种解决方式:
- 删去校验规则中的
type: 'string'
,此时无论是 int 还是 string 格式都可以被校验通过,但 按照async-validator 的文档 的说法,如果没有填写 type 的话,string 会是默认的格式,不知道是不是对此问题做过特殊处理; - 在后台返回前台这个数字时,在数字后面增加
.toString()
将其转换成 string 格式,这样就避免了 int 类型的校验问题。
我这里选择了第二种解决方式,看起来更稳妥一些。
虽然这个问题不是很大,但仍花了我近一个小时来查找原因,在此记录一下,避免后续再踩坑。