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でイメージサーバーを構築

推薦する

MySQL が起動直後にシャットダウンする問題 (ibdata1 ファイルの破損が原因) に対する完璧な解決策

コンピュータ ルームのサーバー上の mysql がしばらく実行されていたのですが、突然、再起動しても...

Node.js で Bash スクリプトを書くための究極のソリューション

目次序文zxライブラリ$`コマンド` CD()フェッチ()質問()寝る()スローしない()チョークフ...

さようなら Docker: 5 分で Containerd に移行する方法

Docker は非常に人気のあるコンテナ技術です。K8S によって廃止され、別のコンテナ技術である ...

mysql5.6 の無効な utf8 設定の問題を解決する

mysql5.6 のグリーン バージョンを解凍すると、my-default.ini ファイルが作成さ...

MySQL インジェクションにおける outfile、dumpfile、load_file 関数の詳細な説明

SQL インジェクション脆弱性を悪用する後期段階では、MySQL のファイル シリーズ関数を使用して...

CSSを使用してHTMLテキストボックス内のテキストの垂直方向の中央を制御する

Text の height 属性が定義されている場合、Text に入力されたテキストは垂直方向に中央...

MySQL トランザクション分離レベルと MVCC の詳細な説明

目次トランザクション分離レベル同時トランザクション実行中に発生した問題SQL標準の4つの分離レベルM...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...

MySQL無料インストール版のパスワード設定に関する詳細なチュートリアル

方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...

MySQLにおけるトランザクション分離レベルの実装原理の詳細な説明

序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...

React のネストされたコンポーネントの構築順序

目次Reactの公式サイトではライフサイクルの説明を見ることができます次に、ネストされたコンポーネン...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

vue.js 動的コンポーネントの詳細な説明

:動的コンポーネントv-bind:is="component name" を使用...

フロントエンド開発に必須:推奨されるブラウザ互換性テストツール 12 選

フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...