テーブル内の要素のドラッグと並べ替えの問題について簡単に説明します

テーブル内の要素のドラッグと並べ替えの問題について簡単に説明します

最近、要素テーブルを使用すると、並べ替えの問題によく遭遇します。単純な並べ替えであれば、要素の公式が具体的な方法を示しています

//テーブルのデフォルトのソート方法はIDの降順です。これを他の順序に変更することもできます。
    <el-table :data="tableData" :default-sort="{prop: 'ID', order: '降順'}">
      //sortable属性を設定すると、ソートボタンが表示されます <el-table-column prop="ID" label="座席番号" sortable>
    </el-table>

しかし、公式の要素コンポーネントはドラッグアンドドロップによる並べ替えをサポートしていません。ここではドラッグアンドドロップによる並べ替え機能を実装するために sortablejs を紹介します。

sortablejs GitHub アドレス

//sortable.js をインストール
NPM でインストール:

$ npm をインストール sortablejs --save

//コンポーネントに導入 import Sortable from 'sortablejs'

//ドラッグして並べ替える必要があるテーブルに ref 属性を追加します <el-table ref="dragTable">

//データレンダリング後にドラッグイベントを追加 created(){
   this.getBanner()
},
方法:{
 非同期getBanner(val){
          apiGetBanner() を待機します。その後 ((res)=>{
               this.bannerTable = res.data.data;
          })
         this.oldList = this.bannerTable.map(v => v.id);
         this.newList = this.oldList.slice();
         this.$nextTick(() => {
             this.setSort() //データのレンダリング後にメソッドを実行する})
    }
    ソートを設定する(){
        定数el = this.$refs.dragTable.$el.querySelectorAll(
          '.el-table__body-wrapper > テーブル > tbody'
        )[0];
        this.sortable = Sortable.create(el, {
         // ドロッププレースホルダーのクラス名、
          ゴーストクラス: 'ソート可能なゴースト', 
                setData: 関数(データ転送) {
                dataTransfer.setData('テキスト', '')
            },
           //ドラッグが実行を終了し、evt はドラッグパラメータ onEnd を実行します: evt => {
              // 再ソートするかどうかを決定します if (evt.oldIndex !== evt.newIndex) {
                  データ = {
                     id:this.bannerTable[evt.oldIndex].id、
                     バナーオーダー:evt.newIndex
                  }
                  //データの送信に失敗した場合は、古いソートを復元します apiPutBanner(data).catch(()=>{
                     定数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 = これ
      ソート可能.create(tbody, {
        onEnd({ 新しいインデックス、 古いインデックス }) {
          const currRow = _this.tableData.splice(oldIndex, 1)[0]
          _this.tableData.splice(新しいインデックス、0、currRow)
        }
      })
    },
    //列ドラッグcolumnDrop() {
      const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
      this.sortable = Sortable.create(wrapperTr, {
        アニメーション: 180,
        遅延: 0,
        onEnd: イベント => {
          定数 oldItem = this.dropCol[evt.oldIndex]
          this.dropCol.splice(evt.oldIndex, 1)
          this.dropCol.splice(evt.newIndex, 0, oldItem)
        }
      })
    }

要素テーブルのドラッグ アンド ドロップによる並べ替えの問題に関するこの記事はこれで終わりです。要素テーブルのドラッグ アンド ドロップによる並べ替えに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueはvuedraggableを使用して、ネストされたマルチレイヤーのドラッグアンドドロップソート機能を実装します。
  • Vueはvuedraggableに基づいて選択、ドラッグ、ソート効果を実装します
  • vue ドラッグ コンポーネント vuedraggable API オプションは、ボックス間の相互ドラッグと並べ替えを実現します。
  • vuedraggable+element uiは、ページコントロールのドラッグアンドドロップソート効果を実現します。
  • Vueのドラッグアンドドロップソートプラグインvuedraggableの使い方を詳しく説明します
  • Elementui テーブル コンポーネント + sortablejs を使用して行のドラッグ アンド ドロップによる並べ替えを実装するサンプル コード
  • vueドラッグコンポーネントvuedraggableの使用に関する詳細な手順
  • vuedraggableを使用して左から右へのドラッグ機能を実装する
  • element+vuedraggableを使用して画像のアップロードとドラッグソートを実現する

<<:  MySQL は対応するクライアント プロセスにどのように接続しますか?

>>:  HTML タグ マーキーを使用してスクロール効果を実現する簡単な方法 (必読)

推薦する

Linux でコマンドまたはプロセスの実行時間を調べる方法

Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...

mysql5.7.19 winx64 インストールおよび構成方法のグラフィック チュートリアル (win10)

mysql 5.7.19 winx64のインストールチュートリアルは以下のように記録され、みんなと...

IE6/IE7/IE8/IE9/FF 向け CSS ハック (概要)

IE8.0の正式版をインストールしたので、基本的なCSS HACKをいくつかまとめてみました。We...

Dockerは終了状態で起動します

docker run後、ステータスは常にExitedになります解決:パラメータを追加: -it do...

2列の水平タイムラインを実装するためのVueサンプルコード

目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...

CentOS 7 に mysql5.7 の解凍バージョンをインストールするチュートリアル

1. mysqlの圧縮パッケージを/usr/localフォルダに解凍し、名前をmysqlに変更します...

CentOS 7 で MySQL 8 の複数のインスタンスを設定する詳細なチュートリアル (必要な数だけ設定できます)

原因最近、プロジェクトのリファクタリングを始めたのですが、マスタースレーブと読み取り書き込み分離を使...

MySQL Bツリーインデックスとインデックス最適化の概要についての簡単な説明

MySQL の MyISAM エンジンと InnoDB エンジンはどちらもデフォルトで B+ ツリー...

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

WEB中国語フォントアプリケーションガイド

Web 上でフォントを使用することは、基本的なスキルであると同時に芸術でもあります。英語のフォントに...

ブラウザは関連するHTTPヘッダーをキャッシュし、HTTPリクエストの数を最小限に抑えます。

最近、Yahoo の 34 の黄金律を読み、ウェブサイトのパフォーマンスを最適化する方法を学びました...

nginxワーカープロセスループの実装

ワーカープロセスは、起動されると、まず自身の動作に必要な環境を初期化し、次に実行する必要があるイベン...

MySQLストアドプロシージャの原理と使用法の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考ま...

vue3ソースコード解析の簡単な実装方法

目次序文🍹準備🍲vue3 の使い方🍖 実装要約する序文最近、私の最初の公式 vue3 + ts プロ...

Linux仮想メモリについての簡単な説明

目次起源仮想メモリページングとページテーブルメモリのアドレス指定と割り当て関数プロセスメモリ管理デー...