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
函数刚刚解决了这个问题。
如果模板是:
<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
函数刚刚解决了这个问题。