vue 要素 el-transfer にドラッグ機能を追加

vue 要素 el-transfer にドラッグ機能を追加

コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、左、右、上、下のドラッグ アンド ドロップ機能を追加する必要があります。
元のコンポーネントはドラッグをサポートしていないため、サードパーティのコンポーネントsortablejsを使用する必要があります。

最初のインストール

 sudo npm i sortablejs --save-dev

HTMLコード

  <テンプレート>
  <el-transfer ref="転送" id="転送" v-model="値" :data="データ">
   <span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
  </el-transfer>
</テンプレート>```

作成する

  <スクリプト>

   'sortablejs' から Sortable をインポートします。

   エクスポートデフォルト{
      データ() {
        const 生成データ = _ => {
          constデータ = []; for (let i = 1; i <= 15; i++) {
            データ.push({
              キー: i,
              ラベル: `オプション ${i}`,
              無効: i % 4 === 0 });
          } データを返します。
        }; 戻る {
          データ: generateData(),
          値: [1, 4],
          ドラッグキー: null }
      },
      マウント() {
        const 転送 = this.$refs.transfer.$el
        const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
        const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
        定数 rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
        ソート可能.create(rightEl,{
          onEnd: (イベント) => {
            const {古いインデックス、新しいインデックス} = evt;
            const temp = this.value[古いインデックス] 
            if (!temp || temp === 'undefined') {
              戻る
            }// 右端の最後の項目を右から左にドラッグしたときに undefined になる問題を解決します this.$set(this.value,oldIndex,this.value[newIndex])  
            this.$set(this.value,newIndex,temp)
          }
        })
        const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
        ソート可能.create(leftEl,{
          onEnd: (イベント) => {
            const {古いインデックス、新しいインデックス} = evt;
            const temp = this.data[古いインデックス] 
            if (!temp || temp === 'undefined') {
              戻る
            } // 右端の最後の項目を右から左にドラッグしたときに undefined になる問題を解決します this.$set(this.data,oldIndex,this.data[newIndex]) 
            this.$set(this.data,newIndex,temp)
          }
        })
        左パネル.ondragover = (ev) => {
          ev.preventDefault()
        }
        左パネル.ondrop = (ev) => {
          ev.preventDefault();
          const index = this.value.indexOf(this.draggingKey) if(index !== -1){ this.value.splice(index,1)
          }
        }
        rightPanel.ondragover = (ev) => {
          ev.preventDefault()
        }
        rightPanel.ondrop = (ev) => {
          ev.preventDefault(); if(this.value.indexOf(this.draggingKey) === -1){ this.value.push(this.draggingKey)
          }
        }
      },
      メソッド: {
        ドラッグ(ev,option) { this.draggingKey = option.key
        }
      }

    } 
</スクリプト>

これで、vue 要素 el-transfer にドラッグ アンド ドロップ機能を追加する方法についての記事は終了です。要素 el-transfer ドラッグ アンド ドロップに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+abp WeChat スキャンコード ログイン実装コード例
  • Vue Elementのテーブルコンポーネントをカプセル化する方法
  • vue+element テーブルで動的な列フィルタリングを実装するためのサンプルコード
  • Vue 要素と Nuxt の使用に関するヒントを共有する
  • vue+elementui ユニバーサルポップアップウィンドウの実装 (追加+編集)
  • Vue+element UI でツリーテーブルを実現
  • Vue+elementUIはフォーム項目を動的に追加し、検証コードの詳細を追加します
  • Vueはフォーム検証を実装するためにelement-uiを使用します
  • Vue Element フロントエンドアプリケーション開発は ABP フレームワークのフロントエンドログインを統合します

<<:  uniAppエディタWeChatスライド問題について

>>:  ショッピングカートのスライド削除効果を実装するReactネイティブサンプルコード

推薦する

Windows 10 での MySQL 5.7.21 インストーラのインストール グラフィック チュートリアル

MySQLをインストールしてメモしておきます。うまくインストールできるか分かりませんが、試してみます...

mysql 5.7.5 m15 winx64.zip インストール チュートリアル

win7 64 ビットで mysql-5.7.5-m15-winx64 をインストールして構成する方...

vue+springbootでログイン認証コードを実現

この記事では、ログイン認証コードを実装するためのvue+springbootの具体的なコードを例とし...

読み込み進捗バーのネイティブ JS 実装

この記事では、ネイティブ JS によって実装された動的読み込みプログレス バーの特殊効果を紹介します...

LinuxにNginxをインストールする正しい手順

序文私のように、Java バックエンドに勤勉な人であれば、多数のプロジェクト機能を実装することに加え...

Reactホームページの読み込みが遅い問題のパフォーマンス最適化事例の詳細な説明

しばらくReactを勉強した後、実践してみたいと思います。そこで、個人のブログのウェブサイトを再構築...

セマンティックタグを使用して、IE6、7、8と互換性のあるHTMLを記述します。

HTML5 では、ヘッダー、フッター、ナビゲーションなどのセマンティック タグが追加されているため...

Linux gzipコマンドの使用

1. コマンドの紹介gzip (GNU zip) コマンドは、ファイルの圧縮と解凍に使用されます。こ...

MySQL msiバージョンのダウンロードとインストールの初心者向けの詳細なグラフィックチュートリアル

目次1. MySQL msiバージョンをダウンロードする2. インストール3. 環境変数を設定する1...

Docker Secretの管理と使用の詳細な説明

1. Docker Secretとは1. シナリオ表示MySQL サービスなど、一部のサービスではパ...

JavaScript でローカル変数をグローバル変数に変換する方法

まず関数の自己呼び出しを知る必要がある関数の自己呼び出し - 自己呼び出し関数1 回限りの関数 - ...

入力テキストボックスの入力実装プロパティを無効にする

今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...

HTML における br と br/ の違い

スタックフローからの回答:単に<br>だけで十分です。その他の形式は、XHTML との互...

64 ビット CentOs7 ソース コードのインストール mysql-5.6.35 プロセス共有

インストールプロセス中に問題が発生しないように、まず依存パッケージをインストールします。 [root...

MySQL の繰り返し読み取りレベルでファントム読み取りを解決できますか?

導入データベース理論についてさらに学んでいくうちに、さまざまな分離レベルによって起こり得る問題につい...