问题描述:
重复使用同一个el-table时,第一次初始化展示时,空数据是empty的插槽可以展示,但第二次使用该表格时,置空表格的数据后,但是表个无法识别空数据,也不展示empyt的插槽
原始代码:
大概的方式就是通过watach监听prop传如的数组的变化,通过计算变化的数组得到的新数组赋值给table
于是就出现了魔幻的剧情,清空数组后不展示空数组的slot,查找原因是因为源码中空数组的展示判断为false,源码如下:
el-table源码:
isShowEmptyText() {
const empty =
!this.isShowLoading &&
(!this.data ||
this.data.length === 0 ||
(!this.tableData || this.tableData.length === 0));
empty && this.fixEmptyScrollViewHeight();
return empty;
}
},
问题分析:
找了很久的原因,考虑过样式覆盖,参数未置空,传参状态不对等等。。 随着调试的进行一一被否定,后来猜测可能是el-table的计算钩子函数未捕获到数组置空,果然找到了问题的所在。
vue不推荐使用key值得方式更新数组,可能导致计算属性无法捕捉到数据的变化
解决方案:
在遍历完成后,在遍历完成后重新赋值,完美解决问题。
收获:
在数组更新换或计算的过程中,尽量不要使用key值得更新方式,可选用处理完成后重新赋值的方式,以防钩子函数无法监听数组变化。