Vueテクノロジーに基づく再帰コンポーネントの実装方法

Vueテクノロジーに基づく再帰コンポーネントの実装方法

説明する

この記事では、Vue テクノロジーに基づいて再帰コンポーネントを実装する方法を紹介します。 Vue を使用して第 1 レベルのリストと第 2 レベルのリストを表示するのは非常に簡単ですが、無限レベルを実現したい場合は、v-for を次々に適用するだけでは機能しません。このとき、再帰メソッドを使用する必要があります。いわゆる再帰は、自分自身を継続的に呼び出すことです。再帰コンポーネントは、無限リストの表示を実現するために、自分自身のコンポーネントを継続的に呼び出します。以下のように表示されます。

コードの実装

1. ツリーコンポーネント

ディレクトリに tree.vue コンポーネントを作成します。

<!-- ツリー ツリー コンポーネント -->
<テンプレート>
  <div class="コンテナ">
      <div v-for="treeData 内の項目" :key="項目">
        <div class="row" @click="extend(item)">
            <span
                ref="アイコン"
                クラス="アイコン-共通"
                :class="{
                    'アイコンダウン': item.children,
                    'アイコンラジオ': !item.children,
                    'アイコン回転': item.isExtend
                }"
            </span>
            <span class="title">{{ item.title }}</span>
        </div>
        <div v-if="isExtend(item)" class="children">
            <tree :tree-data="item.children" :is-extend-all="isExtendAll" />
        </div>
  </div>
  </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
    小道具: {
        // コンポーネントデータ treeData: {
            タイプ: 配列、
            デフォルト: []、
        },
        // デフォルトですべて展開するかどうか isExtendAll: {
            タイプ: ブール値、
            デフォルト: true、
        }
    },
    メソッド: {
        // リストを展開する extend(item) {
            if (item.children) {
                アイテムを拡張します。
            }
        },
        isExtend(アイテム) {
            const isExtend = !item.isExtend && true;
            this.isExtendAll を返します。isExtend: !isExtend;
        }
    }
}
</スクリプト>

<スタイルスコープ>
。容器 {
    フォントサイズ: 14px;
}
。行 {
    ディスプレイ: フレックス;
    アイテムの位置を中央揃えにします。
    カーソル: ポインタ;
    下マージン: 10px;
}
/* ----------- アイコンスタイル START ------------- */
.アイコン共通 {
    表示: インラインブロック;
    遷移: すべて .3;
}
.アイコンダウン{
    幅: 0;
    高さ: 0;
    境界線: 4px 透明実線;
    上境界線: 6px 実線 #000;
    下部境界線: なし;
}
.icon-radio {
    幅: 6px;
    高さ: 6px;
    背景: #000;
    境界線の半径: 50%;
}
.アイコン回転{
    変換: 回転(-90度);
}
/* ----------- アイコンスタイル END ------------- */
。タイトル {
    左マージン: 10px;
}
。子供たち {
    左パディング: 20px;
}
</スタイル>

2. 参考文献

必要な場所にツリー コンポーネントをインポートします。

<テンプレート>
 <tree :tree-data="ツリーデータ" />
</テンプレート>

<スクリプト>
'./components/tree.vue' から Tree をインポートします。

エクスポートデフォルト{
 コンポーネント:
  木、
 },
 データ() {
  戻る {
   ツリーデータ: [
    {
     タイトル: 「レベル 1 リスト 1」、
     子供たち: [
      {
       タイトル: 「二次リスト 1」
                            子供たち: [
                                {
                                    タイトル: 「レベル 3 リスト 1」、
                                }
                            ]
      },
      {
       タイトル: 「二次リスト 2」
      }
     ]
    },
    {
     タイトル: 「レベル 1 リスト 2」
     子供たち: [
      {
       タイトル: 「二次リスト 1」
      },
      {
       タイトル: 「二次リスト 2」
      }
     ]
    },
    {
     タイトル: 「レベル 1 リスト 3」
     子供たち: [
      {
       タイトル: 「レベル 3 リスト 1」、
      },
      {
       タイトル: 「レベル 3 リスト 2」
      },
      {
       タイトル: 「レベル 3 リスト 3」、
      }
     ]
    }
   ]
  }
 }
}
</スクリプト>

レンダリング

要約する

このコンポーネントは、データ表示といくつかの基本的な機能のみを実装しており、一部のプロジェクトの実際のニーズを満たしていないことは確かです。これを使用する場合は、これに基づいて拡張および改善する必要があります。 (たとえば、このコンポーネントを使用して左側のメニューを実装する場合、データを自分で構成し、コンポーネント テンプレートを少し変更してクリック ジャンプを実現できます)。

コンポーネント機能

  • クリックして展開または折りたたむ
  • すべて展開

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

以下もご興味があるかもしれません:
  • ツリー メニューを実装するための Vue.js 再帰コンポーネント (例の共有)
  • Vuejsは再帰コンポーネントを使用してツリーディレクトリを実装します
  • Vue.js の再帰コンポーネントを使用して折りたたみ可能なツリー メニューを実装する (デモ)
  • Vue.js 再帰コンポーネントの学習
  • ツリーメニューを実装するための Vue2 再帰コンポーネント
  • Vue.jsの再帰コンポーネントで組織構造ツリーと人員選択機能を実現
  • ツリーメニューを構築するための Vue.js 再帰コンポーネント
  • Vue 再帰コンポーネント + Vuex 開発ツリーコンポーネント ツリー - 再帰コンポーネントのシンプルな実装
  • Vue 再帰コンポーネント実戦シンプルなツリーコントロールサンプルコード
  • Vueは再帰コンポーネントを使用してツリーコントロールのサンプルコードを記述します

<<:  Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル

>>:  Windows 7 での MySQL 8.0.18 の導入とインストールのチュートリアル

推薦する

CSS スタイルを使用して表のフォントを垂直中央に配置する方法

CSS スタイルを使用して表内のフォントを垂直方向に中央揃えする方法は次のとおりです。下図のようなカ...

Nginx転送マッチングルールの実装

1. 正規表現マッチング大文字と小文字を区別するマッチングの場合 ~ ~*は大文字と小文字を区別しな...

CentOS 6 は Docker を使用して Redis マスター スレーブ データベース操作例を展開します

この記事では、Docker を使用して Centos6 に Redis マスター/スレーブ データベ...

有名ウェブサイトのロゴにおすすめのフォント40選

世界で最も有名なウェブサイトのロゴデザインにはどんなフォントが使われているかご存知ですか?これらのフ...

SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数...

MySQL スケジュールされたデータベース バックアップ操作の例

この記事では、MySQL のスケジュールされたデータベース バックアップ操作の例について説明します。...

HTML割引価格計算の実装原理とスクリプトコード

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

vuex の補助関数 mapGetters の基本的な使い方の詳細な説明

mapGettersヘルパー関数mapGettersヘルパー関数は、ストア内のゲッターをローカルの計...

動的なデジタル時計を実装するJavaScript

この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...

CSS で適応型ディバイダーを巧みに実装する N 通りの方法

分割線はウェブページでよく使われるデザインです。例えば、Zhihuのその他の回答をご覧ください。 こ...

MySQLはtruncateコマンドを使用してデータベース内のすべてのテーブルを素早くクリアします

1. まずSELECT文を実行して、すべての切り捨て文を生成します。ステートメント形式: selec...

Chromeブラウザの自動パスワード保存プロンプト機能を無効にする方法

注: Web 開発では、フォームに autocomplete="off" を追加...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

CSS3 はアニメーション属性を使用してクールな効果を実現します (推奨)

animation-name アニメーション名。複数のアニメーションがバインドされていることを示す...

Centos に MYSQL8.X をインストールするチュートリアル

MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....