js实现table表格上下移动功能,需要交换行与行的数据内容,即a,b=b,a(一行代码)
<template slot="operation" slot-scope="text, record, index"> <a @click="delRow(index,record)"> <a-icon type="delete" theme="twoTone" title="删除"/> </a> <span style="margin: 0px 15px">|</span><a @click="aMoveUp(index)" :disabled="index === 0">上移</a> <span style="margin: 0px 15px">|</span><a @click="aMoveDown(index)" :disabled="index === dataSource.length-1">下移</a> </template>
js实现数据互换方式(很多,本文推荐三种)
1.声明一个数组,存放上下两行的数据,特别注意,直接用等号赋值会导致视图不及时渲染,值发生了交换,但视图没响应
const data = [this.dataSource[index], this.dataSource[index + 1]] // this.dataSource[index] = data[1] // this.dataSource[index + 1] = data[0] this.$set(this.dataSource, index, data[1]) this.$set(this.dataSource, index + 1, data[0])
// 上移 aMoveUp (index) { const data = [this.dataSource[index], this.dataSource[index - 1]] this.$set(this.dataSource, index, data[1]) this.$set(this.dataSource, index - 1, data[0]) },
// 下移 aMoveDown (index) { const data = [this.dataSource[index], this.dataSource[index + 1]] this.$set(this.dataSource, index, data[1]) this.$set(this.dataSource, index + 1, data[0]) }
2.ES6的解构赋值,[a,b] = [b,a]。试图不渲染需要使用this.$set()
[this.dataSource[index], this.dataSource[index + 1]] = [this.dataSource[index+1], this.dataSource[index]]
3.运用运算符优先级。a=[b,b=a][0]
this.dataSource[index] = [this.dataSource[index+1], [this.dataSource[index+1] = [this.dataSource[index]][0]
// 上移 aMoveUp (index) { this.$set(this.dataSource, index, [this.dataSource[index - 1], this.dataSource[index - 1] = this.dataSource[index]][0]) }
// 下移 aMoveDown (index) { this.$set(this.dataSource, index, [this.dataSource[index + 1], this.dataSource[index + 1] = this.dataSource[index]][0]) }