前段时间修改一个后台问题,有一个element form 表单一条item 绑定了3个输入框,只要其中一个输入框有值就通过验证
当初在做的时候是给这个form item 绑定了一个rule,值是一个字符串类型,当3个输入框值有变动当时候手动去修改这个form的值,之前是this.form.xxx = yyy 这样修改的,奇怪的是form中的值明明已经改变了,但async-validator 中的value 还是原来老的,没有及时更新,导致应该可以通过验证的,验证不通过,不能通过验证的却通过了,当时还去翻了element form的源码,发现form-item的 fieldValue没有改变。
突然想到了vue 数据的响应式,form 是一个对象,不是基本数据,直接用赋值的方式虽然值是改变了,但如果给这个值添加一个控件,这个值是不能响应式的反馈到这个控件上的,把赋值的方式 改成 this.$set(this.form,xxx,yyy),测试ok,虽然早就知道了vue的响应式原理,没想到在form 表单验证上也有关联,还是理解的不到位啊