sortable+element表の行をドラッグする方法の例


背景
1、vueプロジェクトの表は、行ドラッグ機能を実現する必要があります。
2、表はelementコンポーネントライブラリの中のel-tableを使用する。
プランの紹介
Sortable.js
紹介:Sortable.jsはライト級のドラッグ&ドロップ順序リストのjsプラグインです。
公式文書から引用します。No.jQuery required.Supports Meteor、AnglarJS、React、Polymer、Vue、Knockout and any CSS library、e.g.Bootstrap.
参照先:  https://github.com/SortableJS/Sortable
vuedraggable
紹介:Sortable.jsのvueコンポーネントに基づいて、ドラッグ機能を実現するために使用されます。
公式文書から引用:Vue drag-and-drop component based on Sortable.js
参照先:  https://github.com/SortableJS/Vue.Draggable
遭遇した問題
vuedraggableを使用する過程で、ドラッグ項目の親レベルの要素をで小包しなければならないことが判明しましたが、elementコンポーネントライブラリはテーブルをカプセル化し、ドラッグ項目(tr)の親レベルの要素を直接的に包むことができませんでした。
あなたのプロジェクトでは、テーブルがコンポーネントライブラリを使用していない場合、参照できるようになります。  https://www.jb51.net/article/162648.htm
ソリューション
sortable.jsを使う
手順一:据え付け

npm install vuedraggable
ステップ2:導入

import Sortable from 'sortablejs';

@Component({
 components: {
  Sortable
 }
})

ステップ3:el-table row-key属性を追加する

<el-table
 ref="filterTable"
 row-key="ip" 
 @filter-change="handlerFilterChange" 
 class="cl-table" 
 :data="resourceList" 
 v-loading="resourceListLoading" 
 stripe style="width:100%;">
 <el-table-column
   prop="name"
  label="   " 
  :min-width="150" 
  show-overflow-tooltip>
 </el-table-column>
 </el-table>
ステップ4:ドラッグする項目の親レベル要素にドラッグ要素を設定します。

mounted() {
   //           ,    tr     
  const table = document.querySelector('.el-table__body-wrapper tbody')
  const self = this
  Sortable.create(table, {
   onEnd({ newIndex, oldIndex }) {
    console.log(newIndex, oldIndex)
    const targetRow = self.resourceList.splice(oldIndex, 1)[0]
    self.resourceList.splice(newIndex, 0, targetRow)
   }
  })
 }

以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。