编辑弹窗数据回显时,关闭弹窗后再次打开弹窗时数据就不回显了?

添加和编辑共用的一个弹窗,编辑时做数据回显,第一次打开弹窗数据可以正常的回显出来,关闭后再次打开的时候弹窗的表单就显示为空了,就没有数据回显了
image.png
上面是父组件里面的打开编辑弹窗和赋值当前行数据
下面是弹窗组件里面的点击保存的方法
image.png

save() {
      this.loading = true
      const saveOrUpdate = this.isUpdate ? updataLibrary : addLibrary
      saveOrUpdate(this.dataForm)
        .then((msg) => {
          this.loading = false
          this.$message.success(msg)
          this.updateVisible(false)
          this.$emit('done')
        })
        .catch((e) => {
          this.loading = false
          this.$message.error(e.message)
        })
    },

然后使用了watch监听弹窗的状态

watch: {
    visible(visible) {
      if (visible) {
        if (this.Rowdata) {
          setTimeout(() => {
            this.$util.assignObject(this.dataForm, {
              ...this.Rowdata,
            })
          }, 100)
          this.isUpdate = true
        } else {
          this.isUpdate = false
        }
      } else {
        // this.$refs.form.clearValidate()
        this.dataForm = { ...this.defaultForm }
      }
    }
  }

打印当前行的数据也能打印出来没有问题。编辑回显的时候就出问题了,第二次打开弹窗的时候就没有回显数据了,是因为watch里面this.dataForm = { ...this.defaultForm }这个原因吗?
请问这个问题具体应该怎么解决呢?

阅读 1.7k
2 个回答

这种情况出现的原因一般是因为你一次编辑修改了this.Rowdata,原因就是浅克隆,解决方法就是把下面的代码改一下:

this.$util.assignObject(this.dataForm, {
  ...this.Rowdata,
})
const deepClone = (obj) => JSON.parse(JSON.stringify(obj));
this.$util.assignObject(this.dataForm, deepClone(this.Rowdata))

1.log 一下数据是不是都正确赋值
2.试试 $forceUpdate 刷新渲染? 有没有可能卡渲染?
3.不行表单 v-if=visible,这个很丑,不是没办法别用

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