由于JS的限制,Vue不能检测以下变动的数组:
- 当你利用索引直接设置一个项时,如:
vm.items[indexOfIyem] = newValue
- 当你修改数组长度时,例如:
vm.items.length = newLength
第一种情况:
<div id="app">
<ul>
<li v-for="item in arr">{{ item }}</li>
</ul>
</div>
var vm = new Vue({
el: '#app',
data: {
arr: ['aaa','bbb','ccc']
}
})
vm.arr[1] = 'ddd'
结果:aaa,bbb,ccc
可以使用如下方法使原数据改变
1.Vue.set(vm.arr,1,'ddd')
2. vm.$set(vm.arr,1,'ddd')
然而,在做项目时候,有一个发现:
<div id="app">
<ul>
<li v-for="item in arr">{{ item }}</li>
</ul>
<ul>
<li v-for="item in arr2">{{ item }}</li>
</ul>
</div>
var vm = new Vue({
el: '#app',
data: {
arr: ['aaa','bbb','ccc']
arr2: ['111','222','333']
}
})
vm.arr[1] = 666;
vm.$set(vm.arr2,1,666)
运行结果是:
aaa,666,ccc
111,666,333
也就是说,$set()方法调用时,页面会全部更新一遍。