Vue 数组改变视图不渲染

1,921 阅读1分钟

在vue中,有时候你修改了数组的某一项值或索引时,视图并未如你想的那样发生变化,虽然你修改了数组但是视图上显示的还是未修改时的值。

查了下相关资料,了解到

由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
1)当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
2)当你修改数组的长度时,例如:vm.items.length = newLength

解决方案官方也给出了

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)

// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

你也可以使用vm.$set,这个是全局方法Vue.set的一个别名。

相关官方文档的说明:

数组更新检测

深入响应式原理