You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中重置v-model时,如何避免同步更新已存入数组的对象?

解决Vue中添加用户后数组元素被清空的问题

嘿,这个问题我之前也碰到过!核心原因是JavaScript对象的引用特性在搞鬼:当你执行this.users.push(this.user)时,数组里存储的并不是this.user对象的独立副本,而是指向这个对象的内存引用。所以当你后续修改this.user的属性时,数组里对应的元素因为和原对象共享同一个内存地址,自然会跟着被清空。

下面给你两种简单有效的解决办法:

方法一:添加时创建对象副本

每次添加用户时,先复制this.user的属性到一个新对象,再把这个新对象push进数组。这样数组里的元素和原this.user就没有引用关联了:

使用对象展开运算符(ES6+)

add() {
  // 复制this.user的所有属性到新对象
  this.users.push({ ...this.user });
  // 清空原对象属性
  this.user.name = '';
  this.user.phone = '';
}

使用Object.assign(兼容性更好)

如果需要兼容旧环境,可以用Object.assign来创建副本:

add() {
  this.users.push(Object.assign({}, this.user));
  this.user.name = '';
  this.user.phone = '';
}

方法二:重置时重新赋值新对象

另一种思路是,添加完用户后,直接给this.user赋值一个全新的空对象,切断原对象的引用关系:

add() {
  this.users.push(this.user);
  // 重新创建一个空对象,替换原user
  this.user = { name: '', phone: '' };
}

注意:这种方法需要确保你在Vue的data选项里已经初始化了user为对象类型,比如:

data() {
  return {
    user: { name: '', phone: '' },
    users: []
  }
}

两种方法都能解决你的问题,选哪种取决于你的代码风格和环境兼容性需求~

内容的提问来源于stack exchange,提问作者user1436631

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:49:09