之前有个项目碰到一个问题,vue里面data的某个数组的一项进行了数据的更新,但是DOM并未随之更新,
后来发现是由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
- 当你利用索引直接设置一个项时,例如:
vm.items[indexOfItem] = newValue
- 当你修改数组的长度时,例如:
vm.items.length = newLength
这个问题之前碰到过也做笔记过,但是当时面对的是对象问题,现在这个是数组问题,这里记录下:
举个例子:
var vm = new Vue({ data: { items: ['a', 'b', 'c'] } }) vm.items[1] = 'x' // 不是响应性的 vm.items.length = 2 // 不是响应性的
解决办法
Vue.set(vm.items, indexOfItem, newValue)
或实例办法
vm.$set(vm.items, indexOfItem, newValue)
为了解决第二类问题,你可以使用 splice
:
vm.items.splice(newLength)