某次开发中,需求需要做成表头、标题数据均是异步更新,此时出现了一个问题:异步更新数据之后,表体的数据更新了,但是表头的数据并没有更新,或有时只更新一部分,或者错位。
问题出现原因:
<el-table-column v-for="item in tableData" :key="item.id">
<!--一级表头文字-->
<template slot="header" slot-scope="scope">
<div class="table-head">{{item.name + '(' +item.value + ')'}}</div>
</template>
<!--.........战略性省略业务代码.........-->
</el-table-column>
排查了很久,后发现:在自定义表头的时候,由于是用的v-for循环生成的,因此会给每个循环体一个固定的key,导致数据频繁异步更新时,因为这个key没有变,所以el-table觉得表头数据是没有变化的,因此就只更新了整体表格数据、key值有变化的列的表头。
解决方案:
<!--表头的v-for中的key设置成随机数,避免出现"数据更新,列表头数据不更新"的bug-->
<el-table-column v-for="item in tableData" :key="Math.random()">
.....
</el-table-column>