最近在用element ui写一个后台项目,使用table组件时发现,当修改完表格数据后,页面无响应,并不会重新渲染,查阅官方文档后发现问题所在:
由于 JavaScript 的限制,Vue 不能检测以下数组的变动:
- 当你利用索引直接设置一个数组项时,例如:
vm.items[indexOfItem] = newValue
- 当你修改数组的长度时,例如:
vm.items.length = newLength
具体解决方法如下:
1.第一类问题可通过以下两种方式达到同样的效果
// 1.Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// 2.Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
你也可以使用 vm.$set
实例方法,该方法是全局方法 Vue.set
的一个别名:
vm.$set(vm.items, indexOfItem, newValue)
2.第二类问题可通过以下方式达到同样的效果
vm.items.splice(newLength)
真实案例如下:
// 页面无响应
this.tableObj.tableList[index] = {
id:val.id,
...this.dialogForm
}
// 页面正常响应
this.$set(this.tableObj.tableList,index,{
id:val.id,
...this.dialogForm
})