<template> <div> <div v-for="item in list2">{{item.name}}{{item.title}}</div> <button @click="change">按钮</button> </div></template><script type="text/ecmascript-6">export default { data() { return { list1: { name: "John", id: 1 }, list2: [], }; }, created() { this.obj = this.list1 //Object.assign(this.obj,{title:'123'}) //←直接绑定到obj上不会给title绑定get和set所以点击按钮也不会更新视图 //↓创建一个新的对象title就能成功绑定get和set~这是什么原理,求解惑 this.obj = Object.assign({},this.obj,{title:'123'}) console.log(this.obj); this.list2.push(this.obj) console.log(this.list2); }, methods: { change(){ this.list2[0].title='harry' } } };</script>
我的理解是vue会直接给新声明对象的所有属性自动绑定set和get~Object.assign把对象合并到新对象上,相当于把合并对象的所有属性重新声明到新对象上所以自动绑了get和set,不知道有没有理解错~
千巷猫影