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

推薦する

ウェブデザイン研究における XHTML の応用の概要

<br />一般的に、「標準的な Web ページ」のファイル構成は XHTML CSS ...

MySQL マスタースレーブレプリケーション 読み書き分離の設定方法の詳細説明

1. 説明前回は、MySQL のインストールと構成、MySQL ステートメントの使用、MySQL デ...

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...

HTML テーブルに複雑なテーブル ヘッダーを実装するためのサンプル コード

複雑な表を作成するには HTML を使用します。複雑なテーブルでは通常、td の rowspan 属...

Linux で docker-compose を使用したソフトウェア構成の詳細な説明

序文この記事では、docker-compose の構成をいくつか紹介します。これらを参考にして、独自...

ethers.js を使用して Solidity スマート コントラクトをデプロイする方法

Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript...

ブートストラップテーブルの使い方のまとめ

この記事では、bootstrapテーブルの使い方を参考までに紹介します。具体的な内容は次のとおりです...

アイデアはDockerプラグインを使用してワンクリックの自動デプロイを実現します

目次環境: 1. Dockerはリモート接続アクセスを可能にするidea dockerプラグインをイ...

CSS3 の新しいレイアウト: flex の詳細な説明

Flexの基本概念フレックス レイアウト (フレックスはフレキシブル ボックスの略)、エラスティック...

WeChatアプレットはシンプルな手書き署名コンポーネントを実装します

目次背景:必要:効果1. アイデア2. 実装1. ページとスタイル2. 初期化3. クリックすると4...

HTML シンプルショッピング数量アプレット

この記事では、参考までにシンプルなHTMLショッピング数量アプレットを紹介します。具体的な内容は次の...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...

階段効果を実現するためのWeChatアプレットカスタムメニューナビゲーション

設計意図ページを開発する際には、ページ上のナビゲーション メニューをクリックしたときにページを対応す...

Alibaba Cloud Server Tomcatにアクセスできません

目次1. はじめに2. 解決策2.1 ファイアウォールを設定してポートを開く2.3 ポートを確認し、...