Vueの自己ネストツリーコンポーネントの使い方の詳細な説明

Vueの自己ネストツリーコンポーネントの使い方の詳細な説明

この記事では、Vueの自己ネストツリーコンポーネントの使い方を参考までに紹介します。具体的な内容は次のとおりです。

レンダリング


予防

  • コンポーネントはネストされており、名前を定義すると、それがコンポーネント名として定義されます。
  • 単一または複数のユーザーを選択する場合、最上位の親コンポーネントのプロパティが使用されます。コンポーネント内でプロパティを同期的に変更することはできないため、コンポーネント内で変更を受け取るために data を使用して同じタイプの別の値を登録し、update を使用してそれをプロパティに同期的に更新します。
  • コンポーネントを展開してユーザーリストの読み込みを開始します
<テンプレート>
  <ul v-show="isShow" ref="ユーザーツリー">
    <li v-for="(item, idx) in userList" :key="idx​​">
      <div>
        <!-- 複数選択ユーザーツリー -->
        <入力
          クラス="プライマリ"
          タイプ="チェックボックス"
          v-model="selectUsers1"
          :value="item.userId"
          v-show="isCheck"
        />
        <!-- 単一選択ユーザーツリー -->
        <span
          @click="onSelect(アイテム)"
          :style="{
            色: selectUser1 == item.userId ? '赤' : '',
            カーソル: 'ポインタ',
          }"
        >
          <i class="iconfont icon-user"></i> {{ item.userName }}</span
        >
        <!-- ユーザーツリーを展開します -->
        <i
          クラス="iconfont icon-right"
          v-if="item.haveChild"
          @click="アイテムを展開(idx)"
        </i>
      </div>
      <!-- ネストされたユーザーツリー -->
      <ユーザーツリー
        :user-id="item.userId"
        v-if="item.haveChild"
        :is-show.sync="item.isShow"
        :select-user.sync="selectUser1"
        :select-users.sync="selectUsers1"
        :is-check="isCheck"
      </ユーザーツリー>
    </li>
  </ul>
</テンプレート>

<スクリプト> 
エクスポートデフォルト{
  name: "user-tree", // コンポーネント名として定義されます。そうでない場合、自己ネストにより、コンポーネント自体が登録されていないというエラーが報告されます。props: {
    isShow:{//ユーザーリストを展開するかどうか type: ブール値、
      デフォルト: false
    },
    userId:{//現在のユーザーツリーの親ID
      タイプ: 数値、
      デフォルト: 0
    },
    selectUser:{//現在選択されているユーザーID
      タイプ: 数値、
      デフォルト: 0
    },
    selectUsers:{//複数選択ユーザータイプ: 配列、
      デフォルト: 関数() {
        戻る [];
      }
    },
    isCheck:{// 複数のオプションを選択するかどうか type: ブール値、
      デフォルト: false
    }
  },

  データ: () => ({
    userList: [], //ユーザーリスト selectUser1: 1, //ユーザーの単一選択 selectUsers1: [], //ユーザーの複数選択 isLoad: true
  })、
  時計:
    selectUser1 (){// ユーザーを単一選択、現在のレベルは親レベルに同期if (this.selectUser1 != this.selectUser) {
        this.$emit("update:select-user", this.selectUser1);
      }
    },
    selectUser(){// ユーザーの単一選択、現在のレベルは親レベルと同期されますif (this.selectUser1 != this.selectUser) {
        this.selectUser1 = this.selectUser;
      }
    },
    selectUsers1 (){//複数選択、現在のレベルは親レベルに同期if (this.selectUsers1 != this.selectUsers) {
        this.$emit("update:select-users", this.selectUsers1);

      }
    },
    selectUsers (){//複数選択、現在のレベルは親レベルと同期if (this.selectUsers1 != this.selectUsers) {
        this.selectUsers1 = this.selectUsers;
      }
    },
    isShow() {
      if (this.isShow) {
        ユーザーリストを取得します。
      }
    }
  },
  メソッド: {
    onSelect (item){// 単一選択ユーザー this.$emit("update:select-user", item.userId);

    },

    expandItem (idx){//ユーザーツリーを展開します if (this.userList[idx].isShow) {
        this.userList[idx].isShow = false;
      } それ以外 {
        this.userList[idx].isShow = true;
      }

    },
    ユーザーリストを取得する() {
      var リスト = [];
      (var i = 0; i < 10; i++) の場合 {
        var userId = Math.round(Math.random() * 10000);
        リスト.push({
          ユーザーID: ユーザーID、
          ユーザー名: "user-" + ユーザーID、
          haveChild: i % 2, //サブツリーがあるかどうか isShow: false //サブツリーを表示するかどうか });
      }
      this.userList = リスト;


    },

  },
  マウントされた(){

    if (this.userId == 1){//現在の親 userId はルート ユーザー ID なので、ユーザー ツリーを読み込んで展開します this.getUserList(this.userId);
    }
  }
};
</スクリプト>

ツリーコンポーネントの使用

<div>{{ selectUser }}</div>
    <div>
      <span v-for="item in selectUsers" :key="item">【{{ item }}】</span>
    </div>
    <ユーザーツリー
      :ユーザーID="1"
      :is-show="true"
      :select-user.sync="ユーザーを選択"
      :select-users.sync="ユーザーを選択"
      :is-check="true"
</ユーザーツリー>

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

以下もご興味があるかもしれません:
  • Vueはネストされたコンポーネント内の値を取得するためにrefを使用します
  • Vueのキープアライブコンポーネントは、複数レベルのネストされたルートのキャッシュを実装します。
  • Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明
  • vue keep-alive は、マルチコンポーネントのネストにおいて個々のコンポーネントが存続し、破壊されないことを可能にします。
  • Vue コンポーネントにネストされたサブコンポーネントを実装する例
  • 単一の Vue ページ上の複数のコンポーネントでブラウザ ウィンドウの変更をネストして監視する問題を解決します。
  • form-create を使用して、vue カスタム コンポーネントとネストされたフォーム コンポーネントを動的に生成します。
  • Vue 親子コンポーネントのネストされたサンプルコード
  • Vue マルチレイヤーコンポーネントネストを実装する 2 つの方法 (テスト例)
  • Vue ネストされたコンポーネントパラメータの受け渡し例の共有

<<:  MySQL ビュー管理ビューの例の詳細説明 [追加、削除、変更、クエリ操作]

>>:  シェルスクリプトを使用して CentOS7 に python3.8 環境をインストールする (推奨)

推薦する

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...

Vue データ内のプロパティをランダムに変更すると、ビューは更新されますか?

インタビュアー: Vue のソースコードを読んだことはありますか?応募者:あります。インタビュアー:...

選択にスタイルを追加するための純粋な CSS (スクリプトなし) 実装

通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。...

Linux で pyenv をインストールする方法

前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...

MySQL 8.0 で列を素早く追加する方法

序文: MySQL 8.0 では高速な列追加がサポートされ、数秒で大きなテーブルにフィールドを追加で...

jQuery+h5 で 9 マス抽選特殊効果を実現 (フロントエンドとバックエンドのコード)

序文:フロントエンド: jq+h5 で 9 グリッドのダイナミック効果を実現バックエンド: thin...

aタグのhref属性とonclickイベントの比較

まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...

MySQL でインデックス構造として B+ ツリーを使用する利点は何ですか?

序文MySQL では、Innodb と MyIsam の両方がインデックス構造として B+ ツリーを...

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

MySQL 5.7 共通データ型

——「MySQL in Simple Terms (第 2 版)」からのメモ数値型整数型バイト最小最...

MySQLはテーブル内のフィールドを別のテーブル内のフィールドの値と等しくなるように更新します

以下のように表示されます。 table1 を z として更新し、table2 を zb として結合し...

Vueはアップロードコンポーネントを実装します

目次1. はじめに2. アイデアファイルをアップロードする2つの方法3. ライフサイクル4. コード...

Linux でのルーティングと仮想マシン ネットワークの設定に関する詳細なグラフィック説明

ルーティングとは何ですか?ルーティングとは、相互接続されたネットワークを介して送信元ステーションから...

Nginx でファイル ホットリンク保護サービスを構築する方法を学ぶ例

序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...