プロジェクトに取り組んでいると、左側のメニューナビゲーションやコメント参照などでよく使用されるツリー状のデータ構造に遭遇することがあります。このデータ構造の特徴は、ネストされるレベルがわからないため、テンプレートを使用してこのようなデータを表示するのは少し難しいことです。この記事では、このデータ構造を表示する 2 つの方法について説明します。 記事で使用したデータは次のとおりです。 メインデータ: { 値: "ルート"、 子供たち:[{ 値: "レベル 1-1", 子供たち:[{ 値: "レベル 2-1", 子供たち:[{ 値: "レベル3-1", 子供たち:[] }] },{ 値: "レベル 2-2", 子供たち:[] }] },{ 値: "レベル1-2", 子供たち:[] }] } こんな感じです。 コンポーネントの再帰呼び出し1 つ目は、自分自身を再帰的に呼び出し、自分自身を参照して子のデータを表示するコンポーネントを作成するコンポーネントです。子コンポーネントは次のとおりです。 <テンプレート> <div> <div class="demo"> {{treeData.value}} <tree-comp v-for="(item, index) in treeData.children" :treeData="item"></tree-comp> </div> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'treeComp', 小道具:{ ツリーデータ: { デフォルト: function(){ 戻る {} } } }, マウントされた(){}、 メソッド:{} } </スクリプト> <style lang="less" スコープ> .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999; &:before{content:'--';display: inline-block;padding:0 4px;} } </スタイル> 次に、子コンポーネントを使用し、子コンポーネントにデータを渡す親コンポーネントを作成します。 <テンプレート> <tree-comp :treeData="メインデータ"></tree-comp> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'treeMain', データ () { 戻る { メインデータ: { 値: "ルート"、 子供たち:[ { 値: "レベル 1-1", 子供たち:[{ 値: "レベル 2-1", 子供たち:[{ 値: "レベル3-1", 子供たち:[] }] },{ 値: "レベル 2-2", 子供たち:[] }] },{ 値: "レベル1-2", 子供たち:[] } ] } } }, コンポーネント:{ "tree-comp": () => import('./TreeComp') }, マウントされた(){}、 メソッド:{} } </スクリプト> 再帰コンポーネントの内容については、公式ドキュメントに記載されています-->再帰コンポーネント レンダリングメソッドの使用コンポーネントを使用するだけでなく、Vue の render メソッドを使用して JavaScript の完全なプログラミング機能を活用し、ツリー データを再帰的に処理して、無限レベルのツリーを表示することもできます。次のように: <テンプレート> <tree-comp :treeData="メインデータ"></tree-comp> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: 'treeRender', データ () { 戻る { メインデータ: { 値: "ルート"、 子供たち:[ { 値: "レベル 1-1", 子供たち:[{ 値: "レベル 2-1", 子供たち:[{ 値: "レベル3-1", 子供たち:[] }] },{ 値: "レベル 2-2", 子供たち:[] }] },{ 値: "レベル1-2", 子供たち:[] } ] } } }, コンポーネント:{ ツリーコンプ:{ 機能的: 真、 プロパティ: {treeData: オブジェクト}, レンダリング(h, {props: {treeData = {}}}) { const creatNode = (ノード)=>{ ノードの子とノードの子の長さが0より大きい場合 hArr = node.children.map(item=>{ とする createNode(item) を返す }) h('div', {class:'demo'}, [node.value, hArr]) を返します }それ以外{ h('div', {class:'demo'}, [node.value]) を返します } } createNode(treeData) を返す }, } }, マウントされた(){}、 メソッド:{} } </スクリプト> <style lang="less" スコープ> .demo{padding:5px 0;margin:1px 10px;text-align: left;font-size:16px;max-width:500px;border-left:1px dashed #999; &:before{content:'--';display: inline-block;padding:0 4px;} } </スタイル> その中核となるのは render メソッドです。creatNode メソッドは深さ優先方式でツリー データを再帰的に走査し、vnode を生成してからページをレンダリングします。 VUE 無限レベルツリーデータ構造表示の実装に関するこの記事はこれで終わりです。VUE 無限レベルツリー構造に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: IDEA で Docker プロジェクトをデプロイする手順
>>: MacOS に MySQL 8.0 をインストールして MySQL にログインする方法
目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...
方法1: 値を追加する公式の説明を見るには MDN にアクセスしてください。優先度はどのように計算さ...
具体的な方法: 1. コマンドプロンプトを開く2. mysql -u root -pコマンドを入力し...
1.ファビコン.cc ico アイコンの Web サイトをオンラインで作成するには、画像をアップロー...
序文コードを実行してエラーが発生すると、エラーが出力されます。エラーにはスタック情報が含まれており、...
MySQL の追加、削除、変更、クエリステートメント1. 練習シートを作成するここでの練習表は3つの...
数学、物理学、および一部の科学技術分野で使用される特殊記号は多数あります。Unicode コードには...
目次アプリ.vueサブ1.vueサブ2.vue要約する vue2 における非親子コンポーネントの値の...
この記事の例では、画像切り替え効果を実現するためのVueの具体的なコードを参考までに共有しています。...
ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...
最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...
Mac で開発されたプロジェクトがあり、パッケージ npm i がインストールされており、すべて正常...
以下に、一般的な MySQL コマンドをいくつか示します。 -- データベース サービスを開始します...
ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...
単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...