如何解决el-table中动态添加固定列时出现的行错位

问题描述

在使用el-table组件时,我们有时需要根据用户的操作动态地添加或删除一些固定列,例如操作列或选择列。但是,当我们使用v-if指令来控制固定列的显示或隐藏时,可能会出现表格的行错位的问题,即固定列和非固定列的行高度不一致,导致表格的布局混乱。例如,下面的代码是一个简单的表格,其中有一个固定在右侧的操作列,该列的显示或隐藏由visremove变量控制:

javascript 复制代码
<el-table-column fixed="right" label="操作" width="120" v-if="!visremove">
              <div class="item" slot-scope="scope">
                <el-popconfirm confirm-button-text='好的' cancel-button-text='取消' icon="el-icon-info" icon-color="red"
                  title="确定删除吗?" @confirm="removerow(scope.row)">
                  <el-button slot="reference" type="text" size="small">删除</el-button>
                </el-popconfirm>
              </div>
</el-table-column>

当我们切换visremove的值时,可能会出现如下图所示的行错位的问题:

问题原因

出现这种问题的原因可能有多种,例如:

  • 固定列和非固定列的宽度不一致,导致表格的总宽度超过了容器的宽度,出现了横向滚动条,影响了表格的高度计算。
  • 固定列和非固定列的内容不一致,导致表格的行高度不一致,影响了表格的对齐。
  • 表格的数据或列发生变化时,表格的dom没有及时更新,导致表格的布局不正确。

问题解决

针对上述的问题原因,我们可以采取以下的一些解决方案:

  • 调整表格的宽度,使其适应容器的宽度,避免出现横向滚动条。
  • 调整表格的行高度,使其一致,避免出现高度不匹配的情况。
  • 调用表格的doLayout方法,对表格的dom进行重新渲染,更新表格的布局。

其中,针对本文添加dom触发bug的条件,有效的方法是使用doLayout方法,该方法可以在表格的数据或列发生变化时,对表格的dom进行重新渲染,更新表格的布局。我们可以在切换固定列的显示或隐藏的方法中,添加表格的刷新方法,例如:

javascript 复制代码
switchvisremove() {
      this.visremove = !this.visremove;
      // 调用doLayout方法对表格dom重新渲染
      // el-table加ref="multipleTable"
      this.$nextTick(() => {
        this.$refs.multipleTable.doLayout();
      });

    }

这样,当我们切换visremove的值时,表格的行错位的问题就可以得到解决,如下图所示:

相关推荐
郭老二8 小时前
【前端】vue3:编译步骤
前端
不在逃避q9 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁9 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9859 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易9 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师10 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户0595401744610 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈10 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen11 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒12 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端