vue 3 中动态控制表格列显隐与顺序的核心是响应式数据驱动:用 v-if 或 css display 控制显隐,按有序 id 数组 v-for 渲染列实现顺序调整,并支持权限白名单与拖拽排序。

在 Vue 3 模板中实现表格列的动态显隐与顺序调整,核心是**不破坏声明式写法的前提下,用响应式控制 + 合理 DOM 处理**。Element Plus 的 el-table 本身不内置列管理逻辑,需结合数据驱动和轻量 DOM 操作来兼顾性能与可维护性。
用 v-if 控制列显隐(适合中小数据量)
最直接的方式是为每列绑定 v-if,通过一个响应式数组或对象控制开关状态:
- 定义列配置列表,每个项含
prop、label、visible字段 - 模板中用
v-for渲染<el-table-column></el-table-column>,并加v-if="col.visible" - 用户操作列设置面板(如多选框)时,只修改
visible值,不重置整个表格 - 注意:给每列加唯一
:key(如:key="col.prop"),避免复用导致渲染错乱
用 CSS display 隐藏列(高性能方案)
当表格行数多、频繁切换列时,v-if 会触发大量组件销毁/重建。此时推荐通过 DOM 样式隐藏:
审查 Vue 管理后台的变更请求(Vue 2 + Element UI,Vue 3 + Element Plus)。重点关注最小化变更实现、上线风险检查以及回归检查清单生成。
- 用
ref获取el-table实例,调用tableRef.value.$el查找对应列单元格 - 根据
prop计算列索引,再用querySelectorAll选中所有该列的td和th - 统一设
style.display = 'none'或恢复为'' - 优点是零重渲染、保留列占位、无抖动;缺点是需手动处理表头固定列、合并单元格等边界情况
调整列显示顺序(靠模板顺序 + 动态生成)
el-table 列顺序完全由模板中 <el-table-column></el-table-column> 的书写顺序决定,无法运行时“交换位置”。所以动态排序要靠重新生成列结构:
- 维护一个有序的列 ID 数组,例如
['name', 'status', 'create_time'] - 用
v-for按该数组顺序遍历列配置,并渲染对应el-table-column - 支持拖拽排序?只需更新这个数组顺序即可,无需操作 DOM
- 若需保留某些列固定(如操作列),可在列配置中加
fixed: 'right',它优先级高于顺序逻辑
权限驱动列显隐(后端返回字段白名单)
真实项目中,列是否可见常由后端权限接口决定。建议流程如下:
- 进入页面时请求接口,获取当前用户对该表格的可显字段列表(如
['id', 'name', 'role']) - 前端将该列表与完整列配置做映射,生成带
visible标志的列数组 - 后续用户手动开关列,只在前端内存中修改,不发请求;提交保存时才同步到服务端
- 注意兼容多级表头:需递归处理
children字段,确保子列也受控
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!









