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

Vue中修改models属性同步改变defaults属性的问题求助

解决Vue中models与defaults对象引用同步修改的问题

你遇到的问题核心是JavaScript对象的引用传递机制:当你直接把this.defaults[type]推入models数组时,并没有复制出一个全新的对象,只是把原对象的引用存进了数组。这就导致models里的对象和defaults里的原对象指向同一块内存空间,修改任意一方的属性,另一方都会同步变化。

解决方法:创建对象的副本(断开引用)

因为你的defaults里的对象都是单层结构(没有嵌套对象),用浅拷贝就能解决问题,有两种常用方式:

方式1:对象展开语法(ES6+,最简洁)

修改你的appendSocial函数:

appendSocial(type){
    // 展开原对象的所有属性到新对象,创建独立副本
    const newSocial = {...this.defaults[type]};
    // 给新对象生成唯一ID,解决v-for的key重复警告(原id为null)
    newSocial.id = Date.now() + Math.random();
    this.models.push(newSocial);
}

方式2:Object.assign()

如果需要兼容旧环境,可以用这个方法:

appendSocial(type){
    // 把原对象的属性复制到空对象,生成新副本
    const newSocial = Object.assign({}, this.defaults[type]);
    newSocial.id = Date.now() + Math.random();
    this.models.push(newSocial);
}

额外优化:修复v-for的key问题

原来的代码中v-bind:key="model.id",但defaults里的id是null,当添加多个同类型的社交链接时,会出现重复的key,导致Vue渲染警告。上面的代码里给新对象生成了唯一ID,就能解决这个问题。

现在再测试:添加的每个社交链接都是独立的对象,修改models里的属性不会影响defaults,多次添加同类型链接也会使用默认的初始值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:45:27