Vueはテーブルヘッダーの数をカスタマイズし、ドラッグアンドドロップしてドラッグ可能なヘッダーの順序を調整します

最初のレンダリング

ここに画像の説明を挿入

ここに画像の説明を挿入

最初に難しさについて話させてください

  • cssレベルのスタイルを表示するために使用するプラグインがわかりません
  • リストはJSonです
  • 要素チェックボックスのバインドされた値は、通常の配列のみにすることができます(オブジェクトはバインドできますが、エコーすることはできません)
  • ドラッグ後に複数選択ボックスにバインドされるデータの順序に影響を与える方法

アイデア

  1. まず、JSonリストデータalldataの全量を準備します。
    例:[{label: 'student name'、val: 'studentname'} ...]
  2. デフォルトでヘッダーを表示するJSonデータnowdata(つまり、現在表示されているヘッダー)を準備します
  3. これら2つをブレットウィンドウに渡します。ブレットウィンドウは現在表示されているヘッダーnowdataを監視し、map()を使用して通常の配列を転送します。
  4. この通常の配列はチェックボックスにバインドされており、デフォルトでチェックされます
  5. チェックボックスオプションはalldataから取得されます(実際にはcopydata、見てみましょう)
  6. プラグインを導入すると、プラグインはJsonにバインドされ、ドラッグ後にJson内のオブジェクトの順序を変更できます(プラグインの機能)
  7. propsの値を直接変更することはできないため、alldataのコピーをコピーします-----> copyalldata
  8. プラグインはcopyalldataをバインドし、copyalldataを監視します。オプションが変更されると、map()は通常の配列に変換され、arryに割り当てられます。
  9. [OK]をクリックして、arryをJsonに転送し、nowdataを上書きします
  10. v- for nowdataは、テーブルヘッダーをトラバースします<el-table-column
  11. 多くのことを確認した後、[キャンセル]をクリックして元の状態に復元し、バックアップすることを忘れないでください

とても面倒で、やるのも面倒です。最初は、このコンポーネントもシンプルに感じられることを知っていましたが、それでも少しテストです。

キーコード

npmは、
data(){return}でドラッグを宣言する必要なしに、ドラッグ可能なプラグインを導入して使用します。

import draggable from 'vuedraggable'

<el-checkbox-group v-model="arry">
     <draggable v-model="copydata" :options="{group: 'label'}" @start="drag=true" @end="drag=false">
           <el-col :span="20" v-for="x in copydata" :key="x.val">
                <!-- 不支持绑定对象 -->
                <el-checkbox :label="x.val" >{
    
    {
    
    x.label}}</el-checkbox>
           </el-col>
      </draggable>
 </el-checkbox-group>

Jsonから通常の配列へ
私の複数選択ボックスは、モニターで使用されるヘッダーのフィールド名にバインドされています

this.arry= newVal.map(item => item.val)

JSonへの配列、クリックして確認してトリガー

let newnowdata=[]
this.alldata.foreach(el=>{
    
    
	if(this.arry.includes(el.val)
	newnowdata.push(el)
}

目を覚ます、みんなのプロジェクトは異なります、コードのワンクリックコピーはありません~~

おすすめ

転載: blog.csdn.net/weixin_45629623/article/details/112980641