<divv-for="(item,index) in list">{{item}}</div><button@click="addProperty">动态添加属性</button><script>javascript">const app=newVue({data(){return{list:{name:'tom'}}},methods:{addProperty(){this.list.age=12//为list动态添加新属性console.log(this.list)//打印添加属性后的list {name:'tom' , age:12}}}})</script>
我们点击按钮,发现打印出了新属性但是视图没有得到更新
为什么呢,得从VUE2的响应式原理说起
2. 原理分析
在VUE2中,响应式是通过Object.defineProperty来实现的
const obj={name:'tom'}
Object.defineProperty(obj,'name',{get(){console.log(`get name ${obj['name']}`)return obj['name']},set(newVal){console.log(`set name ${newVal}`)obj['name']=newVal}})