中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決element關于table拖拽排序問題

發布時間:2021-10-08 09:59:45 來源:億速云 閱讀:194 作者:iii 欄目:開發技術

本篇內容介紹了“如何解決element關于table拖拽排序問題”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

最近在使用element table的時候,經常會遇到排序的問題,如果只是簡單的排序的話,element官方已經給出了指定的方法

//table的默認排序方式是按ID排序 順序為遞減 這里可以改成其它 比如 order
    <el-table :data="tableData" :default-sort="{prop: 'ID', order: 'descending'}">
      //設置sortable屬性時出現排序按鈕
      <el-table-column prop="ID" label="座號" sortable>
    </el-table>

但是,element官方組件并不支持拖拽排序,我在這里引入sortablejs實現拖拽排序的功能

sortablejs GitHub地址

//安裝sortable.js
Install with NPM:

$ npm install sortablejs --save

//在組件內引入
import Sortable from 'sortablejs'

//為需要拖拽排序的表格添加ref屬性
<el-table  ref="dragTable">

//在數據渲染完畢添加拖拽事件
created(){
   this.getBanner()
},
methods:{
 async getBanner(val){
          await apiGetBanner().then((res)=>{
               this.bannerTable = res.data.data;
          })
         this.oldList = this.bannerTable.map(v => v.id);
         this.newList = this.oldList.slice();
         this.$nextTick(() => {
             this.setSort()  //數據渲染完畢執行方法
         })
    }
    setSort() {
        const el = this.$refs.dragTable.$el.querySelectorAll(
          '.el-table__body-wrapper > table > tbody'
        )[0];
        this.sortable = Sortable.create(el, {
         // Class name for the drop placeholder,
          ghostClass: 'sortable-ghost', 
                setData: function(dataTransfer) {
                dataTransfer.setData('Text', '')
            },
           //拖拽結束執行,evt執向拖拽的參數
           onEnd: evt => {
              //判斷是否重新排序
              if(evt.oldIndex !== evt.newIndex){
                  let data = {
                     id:this.bannerTable[evt.oldIndex].id,
                     banner_order:evt.newIndex
                  }
                  //數據提交失敗則恢復舊的排序
                  apiPutBanner(data).catch(()=>{
                     const targetRow = this.bannerTable.splice(evt.oldIndex, 1)[0];
                     this.bannerTable.splice(evt.newIndex, 0, targetRow);
                  })
              }
            }
        })
    }
}

如果需要列拖拽的話,可以參考下面的代碼,和上面是一樣的原理,在這里我就不贅述了

//行拖拽
    rowDrop() {
      const tbody = document.querySelector('.el-table__body-wrapper tbody')
      const _this = this
      Sortable.create(tbody, {
        onEnd({ newIndex, oldIndex }) {
          const currRow = _this.tableData.splice(oldIndex, 1)[0]
          _this.tableData.splice(newIndex, 0, currRow)
        }
      })
    },
    //列拖拽
    columnDrop() {
      const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
      this.sortable = Sortable.create(wrapperTr, {
        animation: 180,
        delay: 0,
        onEnd: evt => {
          const oldItem = this.dropCol[evt.oldIndex]
          this.dropCol.splice(evt.oldIndex, 1)
          this.dropCol.splice(evt.newIndex, 0, oldItem)
        }
      })
    }

“如何解決element關于table拖拽排序問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大方县| 武强县| 宜丰县| 屏南县| 德州市| 海盐县| 新巴尔虎右旗| 井冈山市| 来安县| 汉沽区| 胶州市| 招远市| 子洲县| 锦屏县| 哈巴河县| 凤翔县| 南平市| 错那县| 乾安县| 颍上县| 巫溪县| 太白县| 饶平县| 镇巴县| 比如县| 定西市| 张掖市| 清水河县| 调兵山市| 青州市| 交城县| 衡水市| 雷波县| 九龙坡区| 延安市| 武城县| 谷城县| 广宗县| 壶关县| 凌云县| 廊坊市|