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 の導入とインストールのチュートリアル

推薦する

Windows10でmysql8.0.17を置き換える詳細なチュートリアル

この記事では、Windows10でmysql8.0.17を置き換える具体的な手順を参考までに紹介しま...

Linux のパスワードを紛失した場合にリセットする方法

1. スタートアップメニューでは、カーソルを最初の行に移動します - eを押します 2. UTF-8...

Linux パーティションまたは論理ボリュームにファイルシステムを作成する方法

序文システムにファイル システムを作成し、それを永続的または非永続的にマウントする方法を学習します。...

RHCE ブリッジング、パスワード不要のログイン、ポート番号の変更の概要

目次1. ブリッジを設定し、検証のためにパケットをキャプチャする1. ブリッジデバイスとセッションを...

MYSQL トランザクション チュートリアル Yii2.0 マーチャント引き出し機能

序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...

JavaScript Promise の徹底解説

目次1. Promise とは何ですか? 2. なぜ Promise が存在するのでしょうか? 3つ...

親子コンポーネントの通信を解決するための3つのVueスロット

目次序文環境の準備カテゴリコンポーネントアプリのコンポーネント1. デフォルトスロット2. 名前付き...

MySQLの権限とインデックスの詳細な説明

mysql の権限とインデックスmysql の最高権限ユーザーは root です。 CREATE U...

Linux netstatコマンドの詳細な説明

目次Linux netstat コマンド1. TCP接続ステータスの詳細な説明2. コマンド形式3....

JavaScript による省・市連携効果の実現

この記事では、省と都市間の連携効果を実現するためのJavaScriptの具体的なコードを参考までに共...

プロジェクトにおける CSS グリッドシステムの柔軟な使用方法の詳細な説明

序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...

Linux で Redis のリモート接続を実装する方法

LinuxにRedisをインストールしたら、Javaを使って接続します。Javaコードは次のとおりで...

React で複数の setStates が何回呼び出されるのでしょうか?

目次1. 2 つの setState を何回呼び出すのですか? 2. 2 つの setState の...

html5 の新しいメソッドを使用して JavaScript で要素クラス名を操作する方法の詳細な説明

目次1. classList属性2. 実用化以前の JavaScript では、最初にクラス属性を取...

Vueは新しいウィンドウを開き、パラメータ転送のグラフィック例を実装します。

私が実現したい機能は、新しいウィンドウを開いて新しいページを表示することですが、パラメータを渡す必要...