解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180" v-if="showName"></el-table-column>
<!-- 其他列 -->
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [
{ date: '2016-05-02', name: '王小虎', address: '上海市普陀区金沙江路 1518 弄' },
// 其他数据
],
showName: true // 控制姓名列是否显示的变量
};
},
watch: {
showName(newVal) {
// 当showName变化时,重新渲染表格以修复错乱问题
this.$nextTick(() => {
const columns = this.$refs.table.$refs.tableHeader.$el.querySelectorAll('th');
const columnsWidth = Array.from(columns).map(col => col.clientWidth);
this.$refs.table.$refs.tableBody.$el.querySelectorAll('td').forEach((td, index) => {
td.style.width = `${columnsWidth[index]}px`;
});
});
}
}
};
</script>
这个代码实例中,我们使用了v-if
来控制表格中某列的显示与隐藏,并通过watch
监听showName
的变化。当showName
的值发生变化时,我们通过this.$nextTick
确保DOM已经更新,然后我们手动设置每个单元格的宽度以保持表格布局的正确性。这样做可以解决因条件渲染导致的表格错乱问题。
评论已关闭