vue重置数据并移除el-form校验结果

技术栈:vue + element-ui

场景:dilog有一个form表单,第一次打开的时候填写数据并校验,当关闭dilog的重新打开的时候需要重置data里的数据并移除校验结果

处理方式:我使用下面的方式来重置数据并移除校验

onClose () {
     Object.assign(this.$data, this.$options.data())
     this.$refs['form'].resetFields();
}

但是这样发现数据确实重置了,但是input的校验结果全部为空时候的错误校验,但是如果改成下面的方式则可以完美解决:

onClose () {
      Object.assign(this.$data, this.$options.data())
      this.$nextTick(() => {
        this.$refs['form'].resetFields();
      })
}

为什么放到$nextTick里再重置表单校验就没问题了呢?Object.assign(this.$data, this.$options.data())是同步的重置数据,为什么需要在DOM更新完成后再移除校验呢?

阅读 3.5k
1 个回答

Object.assign修改了数据,会触发异步更新,如果直接resetFields,就会先resetFields,再更新,更新的时候又会发生校验失败的情况。而加了一层$nextTick,就是先更新,更新的时候虽然会校验,但是后面resetFields会移除校验

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题