我从接口拿到用户信息后,想把数据回填到编辑表单里,但输入框一直是空的。明明 console.log 能看到数据,赋值也用了 this.form = res.data,可页面就是没更新。
是不是 Vue 的响应式问题?我试过用 this.$set 但还是不行。表单结构大概是这样的:
<input v-model="form.name" placeholder="姓名">
<input v-model="form.email" placeholder="邮箱">
data 里初始化了 form 对象,但可能结构不完整?求指点!
form: {},后面从接口拿来的数据字段如果比初始结构多,Vue 是不会自动把新字段变成响应式的。比如你初始化是
form: { name: '' },但接口返回了{ name: '张三', email: 'xx@xx.com' },那 email 字段就不会被追踪,v-model当然不更新。解决办法有两个,选一个就行:
第一个,初始化的时候把所有字段都写上默认值,哪怕空着也行:
然后接口回来直接
this.form = res.data就行,因为字段名都一致,Vue 会替换整个对象的引用,触发响应式更新。第二个,如果接口字段太多或者结构不固定,别直接赋值整个对象,而是用
$set或者Object.assign合并:我之前就图省事直接
this.form = res.data,结果发现 email 一直没值,查半天才发现是响应式没跟上。记住一点:Vue2 里对象的新增属性不会自动响应,除非提前声明或者用 $set。