Vue Js 所有赋值都是通过引用,即使是传播对象

Vuejs all assigments are by reference even with spreading objects

如果模板是:

<div id="app">
  <button @click="doEditing">Edit</button>

  <input v-if="editing" v-model="editing.profile.name" />
  <span>{{ user.profile.name }}</span>
</div>

而 Vuejs 应用是:

var app = new Vue({
  el: '#app',
  data: {
    user: {name: 'Foo'},
    editing: null
  },
  methods: {
    doEditing(){
       this.editing = {...this.user};
    }
  }
})

甚至this.editing = {...this.user};正在传播对象,通过引用分配它。所以当我编辑输入时,v-model 改变了 this.user,这不是我所期望的。

我也测试过Object.assign,但是没有机会。

lodash _.cloneDeep 函数刚刚解决了这个问题。