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 環境をインストールする (推奨)

推薦する

Vue の動的メニュー、動的ルートの読み込みと更新の落とし穴

目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます

Ubuntu 15.04 は MySQL リモート ポート 3306 を開きます。以下の操作はすべて...

CSS3は、Transformを使用して動く2D時計を作成します。

これでtransformコースは終了です。例を見てみましょう。transform transform...

JS配列の組み込みトラバーサルメソッドとその違いについての簡単な説明

目次forEach() (ES6) メソッドmap() (ES6) メソッドflatMap() メソ...

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...

MySQL の行レベルロックの詳細な例

序文ロックは、複数のスレッドを実行するときにリソースへのアクセスを強制的に制限するために使用される同...

マージンのマージの問題を解決する

1. 兄弟要素の余白を結合する効果は次のようになります: (2 つの間の間隔は 150 ピクセルでは...

MySql5.7.18 の文字セット構成の詳細なグラフィック説明

背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...

MySQL サーバーにおける SSD パフォーマンスの問題の詳細な分析とテスト

【質問】 HP サーバーを使用しています。SSD が IOPS 約 5000 を書き込むと、%uti...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...

div画像マーキーシームレス接続実装コード

コードをコピーコードは次のとおりです。 <html> <ヘッド> <ス...

MySQLがlocalhost経由でデータベースに接続できない問題に対する完璧な解決策

問題:あるサーバー上の PHP プログラムは、localhost アドレス経由でデータベースに接続で...

Dockerコンテナの起動失敗を解決する方法

質問: コンピュータを再起動した後、docker の mysql コンテナを再起動できません。原因が...

Ubuntu 19にTheanoをインストールする際の問題を解決する

解決: pythearn2 パッケージをダウンロードしたディレクトリで、setup.py ファイルを...