通过v-if动态设置Element表格列时,出现表格列显示错乱、表头闪动等问题

问题描述:在实际开发, 我们经常会通过v-if控制表格列的显隐,来实现不同条件下展示不同的表格列,这时候就可能会出现表格列显示错乱、以及表头闪动等问题

问题分析:

表格列显示错乱:由于key值不会被及时的更新,在显示或者隐藏列时,部分DOM会被继续复用,不会重新渲染,导致列显示错乱

表头闪动由于列的显示或者隐藏,导致了重排以及重绘,表格发生闪动

问题解决:

表格列显示错乱问题解决:

为表格的el-table-column 添加key值 :key=“Math.random()”

<el-table-column v-if="isGetFl" :key="Math.random()" label="xxx" align="center" width="120">
     <template>
         <el-input
             v-model="wasteWeight"
             style="width: 100px;"
             onkeyup="value=value.replace(/[^0-9.]/g,'').replace(/^0[0-9][0-9]*$/g,'')"
         >
             <span style="margin-top: 9px; display: block" slot="suffix">kg</span>
         </el-input>
     </template>
</el-table-column>

表头闪动问题解决: 

在生命周期函数beforeUpdate中调用表格的 doLayout() 方法 (尽量加上可选链,不然可能存在获取不到table实例,造成doLayout为undefined的情况)

beforeUpdate () {
    this.$nextTick(() => {
      this.$refs.table?.doLayout()
    })
}