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

推薦する

docker-compose が遅すぎる場合の解決策の詳細な説明

解決策はただ一つ、ソースを変更することです。 github からのソースは基本的にタイムアウトするの...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

CSS を使用して画像の色を変更する 100 の方法 (収集する価値あり)

序文「画像処理というと、PhotoShop などの画像処理ツールを思い浮かべることが多いです。フロン...

Web デザインの経験: 独善的な Web デザイナー

1. ゴミかクラシックか? Web テクノロジーは急速に更新されており、Web サイトのインターフェ...

MySQL ベースのシーケンス実装方法

チームは新しいフレームを交換しました。すべての新しいビジネスでは、新しいフレームワークと新しいデータ...

js の getBoundingClientRect() メソッドの詳細な説明

1. getBoundingClientRect() 分析getBoundingClientRect...

spanタグのスタイルに幅属性を設定する方法

span タグのスタイルに width 属性を直接設定すると、効果がないことがわかります。 disp...

Nginx インストールの詳細なチュートリアル

1. Nginxの簡単な紹介Nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリ...

フロントエンド開発者に何百万ドルもの価値をもたらす 10 のスキル

フロントエンド開発者が習得する必要のあるスキル。これらのスキルにより、フロントエンド開発者の価値は数...

JavaScript における一般的な配列操作

目次1. 連結() 2. 結合() 3. プッシュ() 5. シフト() 6. シフト解除() 7....

詳細なハードウェア情報を取得するための Linux のいくつかのコマンドの詳細な説明

Linux システム、特にサーバー システムでは、デバイスのハードウェア情報を表示する必要がよくあり...

MySQL 5.5 の導入に関する問題

MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...

better-scrollプラグインのスライドできないバグについて(2021年プラグインで解決)

より良いスクロールの原則親コンテナーであるため、ラッパーの高さはコンテンツのサイズに応じて増加します...

Linux で FTP イメージ サーバーをインストールして展開する方法

Linux で FTP サーバーを設定するためのチュートリアルを参照してください https://w...

React-Native環境のセットアップと基本的な紹介

環境の準備1. 環境構築React Native 中国語ウェブサイト2. 開発ツール フロントエンド...