Element UI table表格行拖动排序

文章展示了如何在ElementUI的表格组件中实现行拖动排序功能,利用sortablejs库进行交互处理。两种效果分别是直接拖动表格行和拖动特定按钮进行排序。代码示例包括HTML模板和JavaScript方法,强调了handle配置项在实现不同效果中的作用。
摘要由CSDN通过智能技术生成

先看第一种效果:拖动表格行进行拖动排序

 第二种效果 拖动指定按钮进行拖动排序

 前提是已经运行项目,并安装并配置element ui 

直接上代码:Html部分

<template>
  <div class="table_count">
    <el-table
        :data="tableData"
        border
        id="table_count"
        stripe
        style="width: 100%">
      <el-table-column
          prop="date"
          label="日期"
          align="center"
          width="180">
      </el-table-column>
      <el-table-column
          prop="name"
          label="姓名"
          align="center"
          width="180">
      </el-table-column>
      <el-table-column
          prop="address"
          align="center"
          label="地址">
      </el-table-column>
      <el-table-column label="操作" align="center">
        <template>
          <i class="el-icon-rank handle"></i>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

JS部分

<script>
import Sortable from 'sortablejs'

export default {
  name: "Tab_index",
  data() {
    return {
      oldList: [],
      tableData: [{
        date: '2016-05-02',
        name: '周伯通',
        address: '东北那嘎达的'
      }, {
        date: '2016-05-04',
        name: '欧阳锋',
        address: '上海市普陀区金沙江路 1517 弄'
      }, {
        date: '2016-05-01',
        name: '黄老邪',
        address: '桃花岛'
      }, {
        date: '2016-05-03',
        name: '无崖子',
        address: '西天大雷音寺1516 弄'
      }]
    }
  },
  mounted() {
    this.rowDrop()
  },
  methods: {
    rowDrop() {
      console.log(23)
      const el = document.querySelector('#table_count .el-table__body-wrapper tbody')
      new Sortable(el, {
        animation: 150,
        handle: '.handle',
        ghostClass: 'blue-background-class'
      });
    }
  }
}
</script>

所依赖关键插件为:sortablejs 官网地址

想要用第一种效果,需要去掉 new Sortable中 handle配置项,其中第一个参数为需要拖拽的HTML元素节点

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Vue 和 Element UI 都提供了一些内置的指令和组件,可以方便地实现列表拖拽功能。下面是一个简单的示例: 1. 安装 Element UI 在 Vue 项目中使用 Element UI,需要先安装 Element UI: ``` npm install element-ui -S ``` 2. 引入 Element UI 在 Vue 项目的入口文件中引入 Element UI: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 创建一个可拖拽表格 使用 Element UI 的 `el-table` 组件创建一个表格,并添加 `el-table-column` 组件来定义表格的列。在每一列的 `header` 中添加 `draggable` 属性,并绑定一个事件处理函数。 ```html <template> <div class="drag-table"> <el-table :data="tableData" style="width: 100%" @sort-change="handleSortChange"> <el-table-column type="index" label="序号" width="50"></el-table-column> <el-table-column label="名称" prop="name" header-draggable @header-dragend="handleHeaderDragEnd"></el-table-column> <el-table-column label="年龄" prop="age"></el-table-column> <el-table-column label="地址" prop="address"></el-table-column> </el-table> </div> </template> ``` 在 `handleHeaderDragEnd` 方法中,获取拖拽结束后的表头位置信息,并根据位置信息重新排列表格列的顺序。 ```javascript export default { data() { return { tableData: [ { name: '张三', age: 18, address: '北京市海淀区' }, { name: '李四', age: 20, address: '上海市浦东新区' }, { name: '王五', age: 22, address: '广州市天河区' }, { name: '赵六', age: 24, address: '深圳市南山区' } ] } }, methods: { handleHeaderDragEnd(newWidth, oldWidth, column, event) { const tableEl = event.target.closest('.el-table') const headerCells = tableEl.querySelectorAll('.el-table__header-wrapper th') const newColumns = [] Array.from(headerCells).forEach((cell, index) => { const prop = cell.getAttribute('data-prop') const column = this.$refs.table.store.states._columns.find(c => c.property === prop) if (column) { newColumns.push(column) } }) this.$refs.table.store.commit('setColumns', newColumns) }, handleSortChange() { // 排序后需要重新计算列的位置 this.$nextTick(() => { const headerCells = this.$el.querySelectorAll('.el-table__header-wrapper th') Array.from(headerCells).forEach((cell, index) => { cell.setAttribute('data-index', index) }) }) } } } ``` 4. 添加样式 为了让表格列能够拖拽,还需要添加一些样式: ```css .drag-table .el-table__header-wrapper th { cursor: move; } .drag-table .el-table__header-wrapper th.dragging { opacity: 0.5; } ``` 至此,我们已经完成了一个简单的可拖拽表格。当用户拖拽表头时,表格列的位置会随之改变。需要注意的是,这个示例只实现了表头拖拽的功能,如果需要实现拖拽的功能,可以参考 Vue 官方提供的 sortable.js 插件。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值