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

推薦する

Linux で特殊文字のファイル名やディレクトリを削除する方法

inode番号でファイルを削除するまずls -iを使用して、削除するファイルのinode番号を見つけ...

Nginx の純粋な構成でリアルタイム ログ レポートを実現するためのアイデアと方法

目次序文実装のアイデア実装手順1. Nginxをコンパイルする2. 設定ファイルは以下のとおりです要...

vuexプロジェクトにおけるログインステータス管理の実践プロセス

目次道具:ログインシナリオ:練習する:シナリオ1: 思考と実践シナリオ2: 思考と実践要約する道具:...

ウェブデザインには目的、アイデア、思考、そして粘り強さがなければならない

<br />はじめに:このアイデアは、数日前に上級ウェブデザインの次の記事を考えていると...

上部の固定divは半透明効果に設定できます

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

自動ロック画面機能を実現するjs

1. 使用シナリオこのような要件があるため、システムが開発されました。ユーザーがデスクトップを離れ...

Linux システムで MySQL の文字セットを UTF8 に変更する手順

目次1. データベース内の MySQL ステータスを確認します。 2. 設定ファイルを変更します。 ...

IPとポートが接続可能かどうかを検出する方法

Windows コマンドテルネット形式: telnet IP ポート場合: テルネット 191.1....

ARMアーキテクチャにおける関数呼び出しプロセスの簡単な分析

目次1. 背景知識1. ARM64レジスタの紹介2. STP命令の詳しい説明(ARMV8マニュアル)...

HTML メタビューポート属性の説明

ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置し...

デザインストーリー: ナンバープレートを覚えられない警備員

<br />私が住んでいる地域では、コミュニティに出入りする車両を管理するために、コミュ...

nginxアクセス制御の実装例

高性能で軽量なウェブサービスソフトウェアであるNginxについて高い安定性 システムリソースの消費量...

MySQL 8.0 が起動できない 3534 の解決策

MySQL 8.0 サービスを開始できません最近、 cmdで MySQL サービスを起動するときに遭...

JavaScript ベースのランダム点呼システムの実装

この記事では、ランダムロールコーラーを実装するためのJavaScriptの具体的なコードを参考までに...

Vue コンポーネントの切り替え、動的コ​​ンポーネント、コンポーネントのキャッシュについて

目次1. コンポーネント切り替え方式方法1: v-ifとv-elseを使用する方法 2: 組み込みコ...