vue+iview 动态调整Table的列顺序
需求:因table列太多,且每个部门关注的信息不一样,拖来拖去不方便观看,客户想让Table列可以拖动,且可以保存顺序。
但是搞动态拖动太难了,我不会,于是改为操作columns数据
思路:
<Table :columns="columns" :data="data1"></Table>
Table里的columns是提前在data里写好的,可以把columns对象转成json字符串存在localStorage或者数据库里,vue开始渲染页面前修改columns的值(vue生命周期),然后再进行渲染,
客户在调整完毕后,重新渲染一下Table组件
我这里是另外写一个弹窗页modal,操作主页table的列顺序
这部分代码是主页代码,只展示了table部分,弹窗页代码在下面
orderOK方法是弹窗页完成后执行,逻辑是给columns赋值,然后改变table的key,使table重新渲染
beforeMount方法是vue生命周期,具体我也忘了,大概应该是vue编译代码生成html之前运行,读取localStorage,没有就存一个,有就用有的。
这里我只允许调整第二列以后的顺序,所以看到 i=2 不要疑惑,业务需要
data () {
return {
tabKey: 0,
tableData: [],
columns:[
{title: 'Name', key: 'name'},
{title: 'Age',key: 'age'}
]
}
}
<Table :key="tabKey" :data="tableData" :columns="columns"> </Table>
methods: {
orderOk () {
let col = JSON.parse(window.localStorage.getItem("VoyageCol"))
for (var i = 2; i < col.length; i++) {
this.columns[i] = col[i]
}
this.tabKey += 1
this.$Message.success('调整成功')
},
beforeMount () {
if (window.localStorage.getItem("VoyageCol") == null) {
window.localStorage.setItem("VoyageCol", JSON.stringify(this.columns));
} else {
let col = JSON.parse(window.localStorage.getItem("VoyageCol"))
for (var i = 2; i < col.length; i++) {//只调整第二列以后的列
this.columns[i] = col[i]
}
}
}
}
新增一个button按钮,点击出现一个弹窗modal,里面一个table,把columns传进去当做table的data
这部分代码是弹窗页代码,主要是读取localStorage给他的table当数据进行操作,排序完以后点确定再存进去,然后调用主页orderOK方法刷新主页table
//本来想自己做按钮实现上移下移,发现iview框架的Table自带draggable属性,可以实现行的上下拖动,省了无数代码
<Modal v-model="modal" title="调整列名顺序" @on-ok="orderOk">
<Table draggable :columns="columns" :data="orderData" height="460" @on-drag-drop="onDragDrop"></Table>
</Modal>
methods: {
orderOk () {
window.localStorage.setItem("VoyageCol", JSON.stringify(this.orderData));
this.$emit('orderOk')
},
onDragDrop (first, end) {
//转成int型,方便后续使用
first = parseInt(first)
end = parseInt(end)
if (first <= 1 || end <= 1) {
this.$Message.warning('前两列禁止移动')
} else {
let tmp = this.orderData[first]
if (first < end) {
for (var i = first + 1; i <= end; i++) {
this.orderData.splice(i - 1, 1, this.orderData[i])
}
this.orderData.splice(end, 1, tmp)
}
if (first > end) {
for (var i = first; i > end; i--) {
this.orderData.splice(i, 1, this.orderData[i - 1])
}
this.orderData.splice(end, 1, tmp)
}
}
}
},
mounted () {
this.orderData = JSON.parse(window.localStorage.getItem("VoyageCol"))
}
}
样式如下:

vue+iview 动态调整Table的列顺序的更多相关文章
- 调整DataTable的列顺序
地址:https://www.cnblogs.com/gaocong/p/6490159.html 标题:DataTable 修改列名 删除列 调整列顺序 DataTable myDt =dt; // ...
- vue+iview中的table表格导出excel表格
一.iveiw框架中table中有exportCsv()方法可以导出.csv后缀文件,类似于excel文件,但是并不是excel文件. 二.实现table表格导出excel文件利用Blob.js 和 ...
- vue+iview实现一行平均五列布局
iview 的栅格布局是以 html代码部分: <Row :gutter="20"> <Col style="float: left;width: 20 ...
- vue中获取滚动table的可视页面宽度,调整表头与列对齐(每列宽度不都相同)
mounted() { // 在mounted中监听表格scroll事件 this.$refs.scrollTable.addEventListener( 'scroll',(event) => ...
- Hive分区表新增字段及修改表名,列名,列注释,表注释,增加列,调整列顺序,属性名等操作
一.Hive分区表新增字段 参考博客:https://blog.csdn.net/yeweiouyang/article/details/44851459 二.Hive修改表名,列名,列注释,表注释, ...
- 使用element-ui 组件动态合并table的行/列(第二次修改)
这是第二次修改,在通过调用后台接口返回来的时候,发现了代码中的问题:现在将博客中错误的地方改过来,添加备注 文章需求:动态实现table表格中行/列的自动合并 使用框架及UI类库:Vue+Elemen ...
- DataTable 删除列 调整列顺序 修改列标题名称
DataTable dt = new DataTable(); //删除列 dt.Columns.Remove("Sex"); dt.Columns.Remove("Ag ...
- 转--DataTable 修改列名 删除列 调整列顺序
DataTable myDt =dt; //删除列 myDt.Columns.Remove("minArea"); myDt.Columns.Remove("maxAre ...
- DataTable 修改列名 删除列 调整列顺序
DataTable myDt =dt;//删除列myDt.Columns.Remove("minArea");myDt.Columns.Remove("maxArea&q ...
- DataGridView使用技巧七:列顺序的调整、操作行头列头的标题
一.列顺序的调整 设定DataGridView的AllowUserToOrderColumns为True的时候,用户可以自由调整列的顺序. 当用户改变列的顺序的时候,其本身的Index不好改变,但是D ...
随机推荐
- linux 镜像备份
linux 镜像备份 使用linux虚拟机的方法 优点 镜像大小比较小 缺点 速度可能比较慢 方法 1.打开虚拟机 我用的ubuntu,读卡器连接电脑虚拟机,ubuntu一般会自动挂载 df -h # ...
- Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟
原文地址:Qt 学习笔记 - 第五章 - Qt 时间编程 - Qt 时钟 Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布 ...
- 音视频编解码 -- 编码参数 CRF
之前多多少少接触过一些编解码参数,CRF 参数也用过,但是最近在和朋友们聊天时,说到使用 FFMPEG 过程中碰到 CRF 参数,以及具体作用流程,这个之前一直没有跟踪过,也没有详细记录过,所以吊起了 ...
- 制作微软原版Windows11 PE(含Powershell)
1.adksetup下载链接:https://download.microsoft.com/download/1/f/d/1fd2291e-c0e9-4ae0-beae-fbbe0fe41a5a/ad ...
- 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周末是 LeetCode 第 100 场双周赛,你参加了吗?这场周赛整体没有 Hard ...
- 安装Windows10后电脑整体速度变慢
是不是觉得从旧版本Windows系统比如(Windows 7)升级到Windows10以后,感觉什么操作都变慢了.譬如打开文件夹,游戏加载速度变缓慢.尤其是腾讯WeGame软件进入游戏前的检测速度明显 ...
- JavaScript中计时器requestAnimationFrame、setTimeout、setInterval、setImmediate的使用和区别
在JavaScript中,我们经常使用requestAnimationFrame.setTimeout.setInterval和setImmediate来控制代码的执行时机.它们各有特点和适用场景: ...
- Service Mesh之Istio部署bookinfo
前文我们了解了service mesh.分布式服务治理和istio部署相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/17281541.html:今天我 ...
- pandas之去重
"去重"通过字面意思不难理解,就是删除重复的数据.在一个数据集中,找出重复的数据删并将其删除,最终只保存一个唯一存在的数据项,这就是数据去重的整个过程.删除重复数据是数据分析中经常 ...
- [Linux]查看硬件及操作系统信息
许多的软件产品对硬件及操作系统等环境是有具体要求的,那么这时候如何快速知晓目标机器的目标资源信息是较为频繁的操作. 命令 全部硬件及系统信息 dmidecode (软硬件全部信息) hostnamec ...