Vue表单回显页面不更新,表单赋值不更新,表单失效

文章讲述了在使用Vue开发时,如何处理因表单对象浅监听导致的双向绑定失效问题。通过检查输出对象发现缺少Vue自定义的get和set方法,解决方案是使用for…of遍历并直接修改对象属性以实现回显。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

点击编辑时,打开一个表单窗口,请求接口拿到数据后赋值给表单,表单直接不能用了

问题场景

逻辑代码如下

  async edit(id){
    let res = await this.$post('/api/edit',{id});
    this.form = res.data;
    this.modalShow=true;
  }

然后页面中输入框输入值,发现form中的对应字段不改变

原因

表单在绑定v-model="form"时,form里面的字段被表单内的各个输入框绑定了;或者是因为<el-form-item label="单据编号:" prop="momnumber">这个prop属性被绑定了;

直接赋值一个对象导致这些内部的绑定丢失了,vue2中的对象的监听只是浅监听,检测不到内部变化,也就无法触发双向绑定。

解决

console.log(this.form);输出一下form,发现输出的对象[[Prototype]]中不包含具体字段的get\set监听方法;

比如表单中有个name字段,如果他被监听了,那一定有个getName和setName之类的方法,这是Vue框架给添加的;

改用对象的for…of去修改回显就可以了;

for(let i of this.form){
    this.form[i]=res.data[i]
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值