Vue实战(四):实现普通表格的行拖拽
1、依赖安装
npm install sortablejs --save
2、功能实现
第一,在ElementUI上找到一个基础的表格。
<template>
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</template>
第二,在el-table的属性上添加row-key
<template>
<el-table row-key="date" :data="tableData" style="width: 100%" border>
<el-table-column prop="date" label="日期" width="180"></el-table-column>
<el-table-column prop="name" label="姓名" width="180"></el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
</el-table>
</template>
第三,在script里面引入Sortable
import Sortable from 'sortablejs'
第四,初始化表格数据
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
第五,编写实现行拖拽的方法
const table = document.querySelector('.el-table__body-wrapper tbody')
const self = this
Sortable.create(table, {
onEnd({ newIndex, oldIndex }) {
const targetRow = self.tableData.splice(oldIndex, 1)[0]
self.tableData.splice(newIndex, 0, targetRow)
}
})
3、效果
拖拽前:
拖拽后: