element table 表格实现上移、下移

本文介绍如何在前端使用Element UI的表格组件实现数据项的上移和下移功能,通过禁用按钮确保边界数据不会发生错误移动,并提供完整的Vue代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景:有时候需要前端实现上移和下移功能

代码如下:

根据交互形式,我这里是把第一条数据的上移按钮置灰不可点击::disabled="scope.$index == 0";最后一条数据下移按钮置灰不可点击::disabled="(scope.$index + 1) == tableData.length"。

<template>
    <el-table
        :data="tableData">
        <el-table-column type="index" label="序号" width="60"></el-table-column>
        <el-table-column label="名称" prop="name"></el-table-column>
        <el-table-column label="操作">
            <template slot-scope="scope">
                <el-button type="text" style="padding:0" :disabled="scope.$index == 0" @click="moveUpward(scope.row, scope.$index)">上移</el-button>
                <el-button type="text" style="padding:0" :disabled="(scope.$index + 1) == tableData.length" @click="moveDown(scope.row, scope.$index)">下移</el-button>
            </template>
        </el-table-column>
    </el-table>
</template>
<script>
export default {
    data() {
        tableData: [
            {id: 1, name: '小明001'},
            {id: 2, name: '小红001'},
            {id: 3, name: '小强001'},
            {id: 4, name: '小刚001'},
            {id: 5, name: '小白001'},
            {id: 6, name: '小花001'}
        ]
    },
    methods: {
        moveUpward(row, index) {
            if (index > 0) {
                let upData = this.tableData[index - 1];
                this.tableData.splice(index - 1, 1);
                this.tableData.splice(index, 0, upData);
            } else {
                this.$message({
                    message: '已经是第一条,上移失败',
                    type: 'warning'
                });
            }
        },
        moveDown(row, index) {
            if ((index + 1) == this.tableData.length) {
                this.$message({
                    message: '已经是最后一条,下移失败',
                    type: 'warning'
                });
            } else {
                let downData = this.tableData[index + 1];
                this.tableData.splice(index + 1, 1);
                this.tableData.splice(index, 0, downData);
            }
        }
    }
}
</script>

 

### 实现 Vue3 和 Element Plus 表格数据行的上移下移 为了实现在 Vue3 和 Element Plus 组件库中的表格数据行上下移动功能,可以采用如下方式: 在 `methods` 部分定义两个函数用于处理上移 (`handleMoveUp`) 和下移 (`handleMoveDown`) 的逻辑。当用户触发相应事件时调用这些方法来调整数组内元素位置从而改变显示顺序。 对于每一项操作,在执行前需判断索引的有效性以防止越界错误发生。具体来说就是检查要交换的数据是否存在以及其所在位置是否合理[^3]。 ```javascript // 上移 handleMoveUp(index, row) { if (index > 0) { let tempData = [...this.tableData]; // 互换两行的位置 [tempData[index], tempData[index - 1]] = [tempData[index - 1], tempData[index]]; this.tableData = tempData; // 让被移动后的当前行滚动到视图中间 this.$nextTick(() => { document.querySelector(`.el-table__body tr:nth-child(${index})`).scrollIntoView({ block: 'center' }); }) } }, // 下移 handleMoveDown(index, row) { if (index < this.tableData.length - 1) { let tempData = [...this.tableData]; // 互换两行的位置 [tempData[index], tempData[index + 1]] = [tempData[index + 1], tempData[index]]; this.tableData = tempData; // 让被移动后的当前行滚动到视图中间 this.$nextTick(() => { document.querySelector(`.el-table__body tr:nth-child(${index + 2})`).scrollIntoView({ block: 'center' }); }) } } ``` 上述代码片段展示了如何通过解构赋值的方式简洁地实现了相邻两项之间的位置互换,并利用 `this.$nextTick()` 方法确保 DOM 更新完成后才去获取最新的节点来进行定位[^2]。 此外,还可以考虑增加按钮禁用状态控制等功能提升用户体验;同时注意边界条件下的异常情况处理,比如首尾记录无法继续向上/向下移动等问题。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值