シャトルボックス機能を実装するためのVueの詳細なコード

シャトルボックス機能を実装するためのVueの詳細なコード

Vue - シャトルボックス機能を実装します。効果図は次のようになります。

CS

。移行{
    ディスプレイ: フレックス;
    コンテンツの中央揃え: 中央;
    アイテムの位置を中央揃えにします。
}
.transfer>.list {
    幅: 200ピクセル;
    高さ: 300px;
    境界線: 1px実線 #000;
    リストスタイル: なし;
}
。コンテンツ{
    フォントサイズ: 30px;
    マージン: 0 20px;
}
.list>li{
    パディング: 5px;
    ボックスのサイズ: 境界線ボックス;
}

html

<div class="転送">
    <!-- 左フレーム -->
    <ul class="リスト左">
        <template v-for="(item, index) in info">
            <li :key="インデックス">
                <input type="checkbox" :id=`checkbox${item.id}` name="checkbox" :checked="item.select" @click="item.select=!item.select" />
                <label :for=`checkbox${item.id}` >{{ item.name }} </label>
            </li>
        </テンプレート>
    </ul>

    <!-- 追加/削除 -->
    <div class="content">
        <p class="push" @click='push' >>>></p>
        <p class="del" @click='del'><<<</p>
    </div>

    <!-- 右フレーム -->
    <ul class="リスト右">
        <template v-for="(item, index) in new_info">
            <li :key="インデックス" >
                <input type="checkbox" :id=`newcheckbox${item.id}` name="newcheckbox" :checked="item.select" @click="item.select=!item.select" />
                <label :for=`newcheckbox${item.id}`>{{ item.name }} </label>
            </li>
        </テンプレート>
    </ul>
</div>

js

データ(){
    戻る {
        // 元のデータ、左フレームのデータ情報:[
            {id:'1',name:'シャオミン'},
            {id:'2',name:'シャオホン'},
            {id:'3',name:'チキン'},
            {id:'4',name:'ハハハハ'},
            {id:'5',name:'ああ'},
            {id:'6',名前:'dddd'},
            {id:'7',名前:'qwert'},
        ]、
        new_info: [], // 新しいデータ、右フレームデータ}
},
メソッド:{// データを追加する push(){
        that = this とする;
        let info = JSON.parse(JSON.stringify(that.info)); // 元のデータをコピーします。ディープコピー info.forEach((item, index)=>{
            // 選択が true の場合にデータを実行する if (item.select){
                that.new_info = that.new_info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 新しいデータフレームに追加してソート delete info[index]; // データを削除 item.select = false; 
            }
        })
        info = info.filter(function (val) { return val }); // フィルターは未定義 
        that.info = info; // 元のデータを更新\
    },
    // データを削除 del(){
        that = this とする;
        let info = JSON.parse(JSON.stringify(that.new_info)); // 元のデータをコピーします。ディープコピー info.forEach((item, index)=>{
            // 選択が true の場合にデータを実行する if (item.select){
                that.info = that.info.concat(item).sort((a,b)=>{ return a.id - b.id }); // 新しいデータフレームに追加してソート delete info[index]; // データを削除 item.select = false;
            }
        })
        info = info.filter(function (val) { return val }); // フィルターは未定義 
        that.new_info = info; // 元のデータを更新する},
},

マウントされた(){
    that = this とする;
    // 選択されているかどうかを判断するために、元のデータに選択フィールドを追加します。that.info.map((val,key)=>{ that.$set(val,'select',false) });
}

************************************************************************************************************************************************************

ここで splice を使用してデータを削除すると問題が発生します。this.info.splice(index,1); 複数の要素を選択すると、一部の要素のみが削除され、選択した要素の一部がまだ存在していることがわかります。これは、要素が削除されると、配列のインデックスが変更され、プログラムが異常になるためです。したがって、削除を使用してデータをクリアし、未定義をフィルタリングします。一般的な考え方は、データに選択フィールドを追加し、それを複数選択ボックスのチェックされたフィールドにバインドし、クリックするとフィールドが反転されるというものです。データを転送するときは、選択が true のデータのみが実行され、新しいデータ フレームに追加され、元のデータは削除されます。

シャトルボックス機能を実装するためのVueの詳細なコードに関するこの記事はこれで終わりです。Vueシャトルボックスの関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vueシャトルボックスは上下の動きを実現します
  • vue3+typeScriptシャトルボックスの実装例
  • VUE Element-uiのシャトルフレームの使い方を詳しく解説
  • Vueはシャトルボックス効果を実現します
  • Vue はオンデマンドでシャトルフレームを転送する要素を導入しました

<<:  CSSオーバーフローメカニズムについての簡単な説明

>>:  Nginx の break と last の違いの詳細な分析

推薦する

CentOS に MySQL 8.0 をインストールして設定するための詳細な手順

序文CentOS に MySQL をインストールして設定する手順は次のとおりです。文章yumソースか...

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

時間別にグループ化された MySQL クエリ ステートメント

年、月、週、日グループによる MySQL クエリ1. 学年別検索 SELECT DATE_FORMA...

Docker Composeオーケストレーションツールの詳細な説明

Docker の作成Docker Compose は、複数の Docker コンテナを定義して実行す...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...

MySQL ALTERコマンドの知識ポイントのまとめ

テーブル名を変更したり、テーブル フィールドを変更したりする必要がある場合は、 MySQL ALTE...

HTMLノードの追加と削除の簡単な例

HTML ノードの追加と削除の簡単な例 HTML ノードの追加と削除の簡単な例<input t...

MySqlのインストールとアンインストールに関する詳細なチュートリアル

この記事では、MySqlのインストールとアンインストールのチュートリアルを参考までに紹介します。具体...

CSS3は光る境界線効果を実現します

操作効果: html <!-- この要素は表示されません。DOM は JavaScript に...

INS と DEL を使用してドキュメントの変更をマークする方法の詳細な説明

ins と del は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、...

UbuntuはCUDAの複数のバージョンをインストールし、いつでも切り替えることができます

CUDA とは何かを紹介するのではなく、複数の CUDA バージョンの共存とリアルタイム切り替えをど...

美しいチェックボックススタイル(複数選択ボックス)はIE8/9/10、FFなどと完全に互換性があります。

恥ずかしながら、このようなよく使われるチェックボックスのスタイルを変更するために、Baidu で長い...

etcd クラスターをデプロイするための docker-compose の実装手順

目次docker-compose.ymlを書くdocker-composeを実行するビルドステータス...

Springboot および Vue プロジェクトの Docker デプロイメントの実装手順

目次A. SpringbootプロジェクトのDockerデプロイメント1. Springbootプロ...

Ubuntu 20.04 と NVIDIA ドライバーのインストールに関するチュートリアル

Ubuntu 20.04をインストールする NVIDIAドライバーをインストールする Pytouch...