我和VueJS一起工作.

我有一个方法,它接收一个对象作为参数.

然后我用Object.assign()克隆这个对象.

Component.vue

export default {
  // ...
  methods: {
    // ...
    activateEditMode (item) {
      this.editItemIndex = this.travelItinerary.indexOf(item)
      this.editItem = Object.assign({}, item)
      // ...
    }
  }
}

this.roteiroCompleto[0]时的原始对象:

enter image description here

但当我编辑克隆对象this.itemEditado时:

enter image description here

原始对象this.roteiroCompleto[0]也会发生变化.

enter image description here

我试图复制每个键和值,只复制带有.slice().map(a=>a)的数组,但没有任何效果.这两个对象保持绑定.

当我console.log(this.itemEditado)岁时,我得到了这个:

enter image description here

奇怪的是,在另一个Vue组件中,我使用了相同的策略,而且效果很好.

推荐答案

Object.assign只做键和值的浅拷贝,这意味着如果对象中的一个值是另一个对象或数组,那么它与原始对象上的引用相同.

var x = { a: 10, b: { c: 100 } };
var y = Object.assign({}, x);

y.a = 20;
console.log( x.a, y.a ); // prints 10 20

y.b.c = 200;
console.log( x.b.c, y.b.c ) // prints 200 200

要深度复制对象,可以在lodash中使用类似于cloneDeep的函数,或者使用JSON.parse( JSON.stringify( obj ) )的内置函数,采用更丑陋的方法.

请注意,第二个选项仅适用于JSON支持的基本类型.

Vue.js相关问答推荐

正在try 访问vutify中v-select(ItemProps)的嵌套json值

用于循环数组的模板元素内的条件渲染

在vuejs中使用表单追加时如何使用布尔值

如何在 vue 组件之外访问$apollo?

使用 Vue Js 运行 Jest 测试时出现语法错误:无法在模块外使用 import 语句

在 Vue 中,如何使用 npm run build 将 .htaccess 包含到生产环境中?

Vuetify 在数据表中插入操作按钮并获取行数据

重新加载发布到 Github 页面的 Vue 网站时出现 404

Vue更改宽度和内容

为 webpack HMR Vue.js 包含来自外部项目文件夹的可导入模块

VS代码中的红点是什么意思

删除一行后刷新 Bootstrap-Vue 表

基本 vue.js 2 和 vue-resource http 获取变量赋值

使用 Firebase Auth for Google 将匿名用户转换为注册用户

异步api调用后如何使用vuex getter

VueJS 2 在多个组件上debounce

beforeCreate 挂钩中的 Vue 2.1 调用方法不起作用

Bootstrap-vue:如何将数据传递给模态?

如何从扩展面板(Vuetify)中删除阴影?

Vuejs 组件等待 facebook sdk 加载