解决el-table表格拖拽后,只改变了数据,表头没变的问题

先看看是不是你想要解决的问题

拖拽后表头不变的bug修复

这个问题一般是使用v-for对column的数据进行循环的时候,key值绑定的是个index导致的,请看我上篇文章eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):-CSDN博客文章浏览阅读36次。对于列拖拽:点击某列的表头前后挪移时,松开鼠标左键后,挪移的列就应该在哪列显示。行拖拽:和列拖拽一样。https://blog.csdn.net/weixin_42234899/article/details/139627036?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139627036%22%2C%22source%22%3A%22weixin_42234899%22%7D

<div>
        <el-table
            :data="tableData"
            border
            scrollbar-always-on
            ref="tableHeader"
            row-key="id"
        >
            <template v-for="(item, index) in setColumns" :key="index">
                <!-- 操作列 -->
                <el-table-column
                    v-if="item.prop === 'oprate'"
                    fixed="right"
                    :prop="item.prop"
                    :label="item.label"
                >
                    <template #header>
                        <div class="search-title">
                            <div :class="checked ? 'search-titleName' : ''">操作</div>
                            <el-icon class="search-icon" @click="search">
                                <Search color="#409EFF" />
                            </el-icon>
                        </div>
                    </template>
                </el-table-column>
                <!-- 序号列 -->
                <el-table-column
                    v-else-if="item.prop === 'index'"
                    :type="item.type"
                    :label="item.label"
                    :width="item.width || 100"
                />
                <!-- 数据列 -->
                <el-table-column
                    v-else
                    :prop="item.prop"
                    :label="item.label"
                    :width="item.width || 100"
                />
            </template>
        </el-table>
    </div>

把v-for循环的key值绑定为其他的唯一值就可以修复这个问题。主要是因为在拖拽后,改变数据的位置,及setColumns数组的顺序,但在循环时的key值,在拖拽前和拖拽后的key值是一样的,所以表头的数据显示不会改变。我在这里,把        :key=index        改成了        :key=item.label        即可解决。

### 如何在 Element UI 的 `el-table` 组件中实现表格行的拖拽功能 为了实现在 Element UI 的 `el-table` 组件中的拖拽功能,可以借助第三方插件 **element-ui-el-table-draggable** 来完成这一需求[^1]。该插件基于 Sortable.js 库开发,能够轻松地使 `el-table` 支持行级别的拖拽排序。 以下是具体的实现方法以及代码示例: #### 安装依赖 首先需要安装所需的 npm 包: ```bash npm install element-ui-el-table-draggable --save ``` #### 引入插件 在项目的入口文件(通常是 main.js 或者单独的插件引入文件)中注册此插件: ```javascript import Vue from 'vue'; import ElTableDraggable from 'element-ui-el-table-draggable'; Vue.use(ElTableDraggable); ``` #### 使用示例 下面是一个完整的示例,展示如何通过 `el-table-draggable` 插件来启用 `el-table` 的拖拽功能: ```html <template> <div> <!-- 添加 draggable 属性 --> <el-table :data="tableData" row-key="id" @sort-change="handleSortChange"> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> </el-table> <!-- 配置 drag-handle --> <el-button type="primary" icon="el-icon-sort" circle class="drag-handle"></el-button> </div> </template> <script> export default { data() { return { tableData: [ { id: 1, name: '张三', age: 28, address: '北京' }, { id: 2, name: '李四', age: 30, address: '上海' }, { id: 3, name: '王五', age: 25, address: '广州' } ] }; }, methods: { handleSortChange(event) { console.log('排序事件:', event); } } }; </script> <style scoped> .drag-handle { margin-top: 10px; } </style> ``` 上述代码片段展示了如何利用 `row-key` 和 `@sort-change` 方法绑定数据源,并通过按钮触发拖拽操作。 #### 自定义表头宽度与样式调整 如果希望进一步优化用户体验,可以通过 JavaScript 动态设置宽或者添加额外的功能支持。例如,使用原生 DOM 操作修改表头宽度[^3]: ```javascript document.querySelector('.el-table__header-wrapper th').style.width = '200px'; ``` 此外,在实际应用过程中可能还需要考虑一些边界情况处理,比如当用户取消选择某一行时重新渲染表等问题[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值