<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天給大家分享一下樹形表格拖拽排序,樹形表格排序的教學不多,可能還會有問題,我在這裡詳細給大家講解一下,如果你有這樣的需求或覺得有用,請給個關注或收藏一下吧,方便後期檢視使用。
npm install sortablejs --save
import Sortable from 'sortablejs'
<el-table ref="table" row-key="id" :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="180"></el-table-column> <el-table-column prop="name" label="姓名" width="180"></el-table-column> </el-table>
樹形表格排序實現原理:把樹形的結構轉為列表再進行拖拽,不轉換的話,拖拽的位置是不對的,就出錯了
data() { return { tableData: [ { id: 1, name: 'AAA', level: 1, children: [ { id: 2, name: 'A-1', level: 2 } ] }, { id: 3, name: 'BBB', level: 1, children: [] } ], activeRows: [] // 轉換為列表的資料 } }, mounted () { this.rowDrop() }, methods: { // 將樹資料轉化為平鋪資料 treeToTile (treeData, childKey = 'children') { const arr = [] const expanded = data => { if (data && data.length > 0) { data.filter(d => d).forEach(e => { arr.push(e) expanded(e[childKey] || []) }) } } expanded(treeData) return arr }, rowDrop() { const tbody = this.$refs.table.$el.querySelectorAll('.el-table__body-wrapper > table > tbody')[0] Sortable.create(tbody , { animation: 300, onMove: () => { this.activeRows = this.treeToTile(this.tableData) // 把樹形的結構轉為列表再進行拖拽 }, onEnd: e => { //e.oldIndex為拖動一行原來的位置,e.newIndex為拖動後新的位置 if (e.oldIndex !== e.newIndex) { // 根據自己專案需求增添條件限制 const oldRow = this.activeRows[e.oldIndex] // 移動的那個元素 const newRow = this.activeRows[e.newIndex] // 新的元素 // 請求介面排序,根據後端要求填寫引數 } } }) } }
這裡就使用了2個方法,還有其它方法,根據自己需求來使用
onAdd: function (evt) { // 拖拽時候新增有新的節點的時候發生該事件 console.log('onAdd.foo:', [evt.item, evt.from]) }, onUpdate: function (evt) { // 拖拽更新節點位置發生該事件 console.log('onUpdate.foo:', [evt.item, evt.from]) }, onRemove: function (evt) { // 刪除拖拽節點的時候促發該事件 console.log('onRemove.foo:', [evt.item, evt.from]) }, onStart: function (evt) { // 開始拖拽出發該函數 console.log('onStart.foo:', [evt.item, evt.from]) }, onSort: function (evt) { // 發生排序發生該事件 console.log('onUpdate.foo:', [evt.item, evt.from]) }, onEnd ({ newIndex, oldIndex }) { // 結束拖拽 let currRow = _this.tableData.splice(oldIndex, 1)[0] _this.tableData.splice(newIndex, 0, currRow) }
1.如果你的onEnd
方法不是箭頭函數,如下面這樣,需要在上面定義一下this
指向,不然會報錯
const _this = this Sortable.create(tbody , { onEnd ({ oldIndex, newIndex }) { } })
2.新增拖拽的方法,需要等表格資料獲取到,不然有可能是空的tbody ,拖拽就不生效了。 可以在await
表格資料獲取後,在呼叫rowDrop
方法
3.如果重新整理了表格,會導致拖拽失效,需要重新新增拖拽方法this.rowDrop()
4.如果重新整理表格會導致頁面重新整理,卷軸就不在之前操作的位置,需要重新捲動頁面,體驗效果不好。解決方案就是需要記錄卷軸位置,拖拽後重新整理頁面自動捲動到當前位置,下一篇會講解記錄捲動位置,請進入我的主頁檢視
到此這篇關於Vue+Element樹形表格實現拖拽排序範例的文章就介紹到這了,更多相關Vue Element樹形表格拖拽排序內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45