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ネイティブサンプルコード

推薦する

Linux サーバーの状態を監視する方法

私たち、特に Linux エンジニアは毎日 Linux サーバーを扱っています。サーバーのセキュリテ...

Linux ファイル記述子、ファイルポインタ、および inode の詳細

目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...

Dockerコンテナの原理の分析

目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...

dl、dt、dd リスト ラベルの例

dd タグと dt タグはリストに使用されます。通常は <ul><li> タ...

XHTMLタグは適切に使用する必要があります

<br />123WORDPRESS.COM の以前のチュートリアルでは、Web ページ...

実用的な基本的な Linux sed コマンドのサンプルコード

Linux ストリーム エディターは、データ センターでスクリプトを実行するのに便利な方法です。これ...

Nginx に lua-nginx-module モジュールをインストールする方法

ngx_lua_module は、lua パーサーを nginx に埋め込み、lua 言語で記述され...

デザイン理論: デザインにおける階層

<br />原文: http://andymao.com/andy/post/80.ht...

CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

Web デザインでよく耳にするプロパティ名: content、padding、border、marg...

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

Vue+Websocketはチャット機能を実装するだけです

この記事では、チャット機能を簡単に実装するためのVue+Websocketの具体的なコードを参考まで...

Vue の基本入門: Vuex のインストールと使用

目次1. vuexとは何か2. インストールと導入3. vuexの使用4. プロセスの紹介5. 突然...

FileZilla 425 FTP に接続できない (Alibaba クラウド サーバー) の解決策

Alibaba Cloud ServerがFTPに接続できないFileZilla 425 データ接続...

MySQL挿入パフォーマンスを最適化する方法の例

MySQL パフォーマンスの最適化MySQL パフォーマンスの最適化とは、リソースを合理的に配置し、...

MacOS Catalina アップグレード後の VMware ブラック スクリーン問題に対する完璧な解決策の詳細な説明

MacOS Catalina アップグレード後の VMware ブラック スクリーンに対する完璧なソ...