在使用表格组件时,经常会遇到表格数据变化但是页面却没有更新数据的情况;
这是因为
当vue的data里面已经声明或者赋值过的对象或数组(包含对象值),向对象里面添加新的属性和更新这个新属性的值,这个新属性并没有被vue转化为响应式的属性,页面视图是不会更新的;
所以这里我们需要强制刷新表格,以下几种方式
- 在nextTick中使用
this.$refs.table.doLayout() - 使用
this.$forceUpdate()方法 - 在tableData赋值前先置空
- 给表格组件
绑定key设置为Math.random(),在需要刷新数据的地方重新给绑定key赋值 以上四种方式我在实际使用过程中,第四种绑定key的方法最为方便有效,也适用于其他组件不刷新的情况;也有第三种方法生效的情况,建议都可以尝试下。
注意第三种方法需要需要在nextTick中复制,如下所示:
// 置空
this.tableData = [];
// 赋值
this.$nextTick(() => {
this.tableData = results;
})