Vueカスタムツリーコントロールの使い方の詳細な説明

Vueカスタムツリーコントロールの使い方の詳細な説明

この記事では、Vueカスタムツリーコントロールの使い方を参考までに紹介します。具体的な内容は次のとおりです。

効果画像:

データ構造:

木: {
        title: '', // タイトル (名前) 
        キー: '0'、
        head: '', // アバター selectStatus: false, // チェックボックスの選択状態 children: [
          {
            タイトル:「王王エピソード1」
            キー: '0-0'、
            頭: ''、
            選択ステータス: false、
            子供たち: [
              {
                キー: '0-0-0'、
                タイトル:「王仔1」
                ヘッド: require('@/assets/wan.jpg'),
                選択ステータス: false
              }
            ]
          },
          {
            タイトル:「王王パート2」
            キー: '0-1'、
            頭: ''、
            選択ステータス: false、
            子供たち: [
              {
                タイトル:「王旺二部一軍」
                キー: '0-1-0'、
                頭: ''、
                選択ステータス: false、
                子供たち: [
                  {
                    タイトル:「王旺二部、チーム1、クラス1」、
                    キー: '0-1-0-2'、
                    頭: ''、
                    選択ステータス: false、
                    子供たち: [
                      {
                        タイトル:「王在3」
                        キー: '0-1-0-2-0'、
                        ヘッド: require('@/assets/wan.jpg'),
                        選択ステータス: false
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
},

アイデア:

/*カスタム ツリー コントロールの核となるのは、「コンポーネントが自分自身を呼び出す」ことです。ここでは、ツリー コントロールはサブコンポーネントにカプセル化されています*/
<テンプレート>
  <div>
    <div class="tree-custom">
      <div :style="indent" @click="toggleChildren"> //toggleChildren イベントは、「コンテンツを展開」および「コンテンツを閉じる」ためのコントロール イベントです。/* 
       再帰データ表示の具体的な内容は次のとおりです。たとえば、このプロジェクトでの再帰の具体的な内容は、エフェクト図から「Picture/Avatar」、「Title/Name」、「null/CheckBox」です。
       効果図にはロジックが示されています。
       <div v-if="!headImg && ラベル">
       //アバター画像にタイトルがない場合は、「arrow-title」スタイルを表示します</div>
        <div v-if="headImg">
       //アバター画像がある場合は、「avatar-name-checkBox」スタイルを表示します</div>
       */      
      </div>
      <tree-custom // "自分自身を呼び出す"
        :key="children.key" // キーの値は一意です v-for="children in treeData"  
        v-if="showChildren" // トグルチャイルド イベントに基づいてコンテンツを展開するかどうかを決定します:treeData="children.children" // 以下はいくつかのプロパティです。理解できるはずです。もう言葉はありません!
        :label="子供.タイトル"
        :headImg="子供の頭"
        :pkid="子供.キー"
        :depth="depth+1" // これは各行のインデント スタイルを制御するために使用されます。具体的な使用法を確認するには、一番下に移動 => indent() します: selectStatus="children.selectStatus"
        v-bind="$attrs" // これら 2 つは、祖父母コンポーネントと孫コンポーネント間の通信を実装するために使用されます。v-on="$listeners"
      >
      </tree-custom>
    </div>
  </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
  name: 'TreeCustom', // コンポーネントに名前を付けます。それ以外の場合、データ()を呼び出す方法{
    戻る {
      showChildren: true, // これはコンテンツを表示するかどうか、つまり展開したり折りたたんだりするかどうかを制御するデータです。
      currentInfoData: {} // これは現在の行のデータを取得するために使用されます。簡潔にするために、上記のコードの特定の使用法は私が削除しました。あまり意味がありません。}
  },
  //落とし穴を避けるために、オブジェクトのデフォルト値はファクトリー関数によって返されるべきです props: {
    ツリーデータ: {
      タイプ: 配列、
      デフォルト: () => []
    },
    ラベル: {
      タイプ: 文字列、
      デフォルト: () => ''
    },
    深さ:
      タイプ: 数値、
      デフォルト: () => 0
    },
    ヘッドイメージ: {
      タイプ: 文字列、
      デフォルト: () => ''
    },
    キッド:
      タイプ: 文字列、
      デフォルト: () => ''
    },
    選択ステータス: {
      タイプ: ブール値、
      デフォルト: () => null
    }
  },
  計算: {
    indent () { // 異なるレベルのインデントスタイルを定義します return { transform: `translate(${(this.depth - 1) * 15}px)` }
    }
  },
  メソッド: {
    トグルチャイルド(){
      this.showChildren = !this.showChildren
    },
    チェックボックス選択変更 (e) {
      定数チェック = e.target.checked
      (チェックあり){
       // $listeners メソッドを使用して祖先の関数を呼び出します。これは再帰コンポーネントなので、コンポーネントは厳密な親子関係を持たない可能性があるため、$emit や $parent などのメソッドは適切ではありません。this.$listeners.addSelectedData(this.currentInfoData)
      }
      チェックされている場合{
        this.$listeners.deleteSelectedData(this.currentInfoData)
      }
    },
    getCurrentInfo (ラベル、headImg、pkid) {
      this.currentInfoData = {
        キー: pkid、
        タイトル: ラベル、
        ヘッド:headImg
      }
    }
  }
}
</スクリプト>
/*コンポーネント呼び出しメソッド*/
<div class="tree-scroll">
  <ツリーカスタム
    :label="ツリーのタイトル"
    :headImg="ツリーのヘッド"
    :treeData="tree.children"
    :pkid="ツリーキー"
    :深さ= "0"
    :selectStatus="ツリー.selectStatus"
    @addSelectedData="選択されたデータを追加"
    @deleteSelectedData="選択したデータを削除" />
</div>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ツリーコントロールを使用した Vue+iview の具体的な使用法
  • Ant Design VueのツリーコントロールのdefaultExpandAll設定が無効になる問題を解決します
  • サードパーティに頼らずにVueを使用してTreeツリーコントロールを実装するケーススタディ
  • Vue+Element UI ツリー コントロールはドロップダウン機能メニュー (ツリー + ドロップダウン + 入力) を統合します。
  • Vue 再帰コンポーネント実戦シンプルなツリーコントロールサンプルコード
  • vue-element Treeツリーコントロール充填ピットの詳細な説明
  • Vue elementUI ツリー ツリー コントロールは親ノード ID インスタンスを取得します。
  • Vueは再帰コンポーネントを使用してツリーコントロールのサンプルコードを記述します
  • vue.js の element-ui ツリー ツリー コントロールを iview に変更する方法
  • VUE の Ele.me ツリー コントロールに追加、削除、変更機能を追加するためのサンプル コード

<<:  MySQL トリガーの紹介、トリガーの作成、使用制限の分析

>>:  Nginx+FastDFSでイメージサーバーを構築

推薦する

CSS最適化スキルの自己実践体験

1. CSS スプライトを使用します。利点は、CSS で使用される小さな画像を 1 つの大きな画像に...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

WeChatアプレットのスクロールビューの改行問題を解決する

今日、小さなプログラムを書いていたときに、スクロールビューを使用したのですが、スクロールビュー内のテ...

MySQL データベースの大文字と小文字の区別の問題

MySQL では、データベースはデータ ディレクトリ内のディレクトリに対応します。データベース内の各...

moment.jsの時間と日付の処理の詳細な説明

月曜日から日曜日の時間形式の変換(Y --- 年 M --- 月 D--- 日) : : : : :...

CentOS の Nginx 公式 Yum ソースの設定を詳しく解説

私はプロジェクトの展開にAlibaba Cloudから購入したCentOSを使用しています。最近、プ...

JSでユーザーを追跡する方法

目次1. 同期AJAX 2. 非同期AJAX 3. ユーザーのクリックを追跡する4. リバウンドトラ...

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

Navicat Premier の MySQL へのリモート接続エラー 10038 の解決方法

MySQL へのリモート接続が失敗する場合は、次の理由が考えられます。 1. 若い男性/女性の方は、...

Dockerコンテナ間の通信を実装する方法

シナリオ: laradock 開発環境 (php7.3+mysql5.7) がローカルに構築されてい...

jsはカスタムドロップダウンボックスを実装します

この記事の例では、カスタムドロップダウンボックスを実装するためのjsの具体的なコードを参考までに共有...

MySQL マルチバージョン同時実行制御 MVCC の基本原理の分析

目次1 トランザクションの同時実行で発生する問題1.1 ダーティリード1.2 繰り返し不可能な読み取...

VMware12.0 インストール Ubuntu14.04 LTS チュートリアル

私は、デスクトップ バージョンとサーバー バージョンの両方で、仮想マシンにさまざまなイメージを何度も...

MySQLの最適化の詳細な分析とパフォーマンス

導入データベースを使用したことがある人なら、機能面での like 記号と = 記号の類似点と相違点を...

case when文のエラー問題の詳細な説明

序文MySQL データベースでは、if else のような判断演算を使用することがあります。では、M...