ホームページ ウェブフロントエンド jsチュートリアル Vue を使用してツリー コンポーネントを開発する方法

Vue を使用してツリー コンポーネントを開発する方法

Jun 19, 2018 pm 02:31 PM
vue vue.js

この記事では主に、コンポーネントの再帰的な使用方法を示す、Vue ツリー コンポーネントを開発するためのサンプル コードを紹介します。今、それをあなたに共有し、参考として提供します。

この記事ではVueツリーコンポーネントのサンプルコードを紹介し、皆さんに共有します。 詳細は以下の通りです:

SemanticUIとvueを使ってメニューバーコンポーネントを作成する 実装方法はおそらく次のようになります:

<template> 
  <p class="ui menu"> 
   <template v-for="item in leftItems"> 
    <a " v-if="!item.children" @click="item.click"> 
     <i class="{{ item.icon }} icon" v-if="item.icon"></i>{{item.text}} 
     <p class="ui mini {{item.labelColor }} label" v-if="item.label"> 
      {{item.label}} 
     </p> 
    </a>  
   //如果有有children则说明是下拉菜单项,然后递归调用自身 
    <template v-else="item.children.length > 0"> 
     <p class="ui dropdown item"> 
      <i class="{{ item.icon }} icon" v-if="item.icon"></i>   
      <p class="text"> {{item.text}}</p> 
      <menubar :items="item.children" ></menubar> 
     </p> 
    </template> 
   </template> 
  //显示在右侧的菜单项,也是递归调用自身 
   <menubar :items="rightItems" v-if="rightItems.length > 0"></menubar> 
  </p> 
</template>
ログイン後にコピー

を使用する場合。親コンポーネント アプリがメニューバー コンポーネントを使用している場合、データ内で項目データを定義する必要があります。たとえば、ツールバーがクリックされたときに

menubar:[ 
     {id:"a",text:"主页1",icon:"home",tips:"提示",label:"33",labelColor:"red",url:"#"}, 
     {id:"b",text:"菜单",icon:"edit",tips:"提示",url:"#",children:[ 
       {id:"a",text:"菜单1",click:"test3",icon:"home",url:"#"}, 
       {id:"a",text:"菜单2",click:"test3",icon:"home",url:"#"} 
     ]}, 
     {id:"bb",text:"编辑",tab:"a",icon:"user",vlink:"#"}, 
     {id:"bb",text:"文件",tab:"b",icon:"user",click:"test1"}, 
     {id:"bb",text:"帮助",tab:"c",icon:"help",click:"test2"}, 
     {id:"bb",text:"工具",icon:"user",url:"www.baidu.com"}, 
     {id:"c",text:"设置",icon:"home",tips:"提示",enabled:true,color:"blue",url:"#",right:true,label:"",children:[ 
        {id:"bbb",text:"配置",icon:"home",tips:"提示",click:"test3"}, 
        {id:"adsd",text:"退出",icon:"home",tips:"提示",vlink:"/workdesk",url:"#"} 
        ] 
      } 
   ]
ログイン後にコピー

のクリック イベントが定義される必要があります。は、親コンポーネント アプリのイベントで次のように定義されます。

events:{ 
  eventa:function(){....}, 
  eventb:function(){....}, 
}
ログイン後にコピー

ツールバー コンポーネントは、内部のサブコンポーネントを含む受信アイテムに基づいて生成されます。最終的なツールバー コンポーネントの構造はツリー構造です。例:

MenuBar
--MenuBar各メニューバーには独自のコンテキストがあるため、サブコンポーネントのメニューバーのクリック イベントがトリガーされると、最上位のアプリコンポーネントは呼び出されず、親メニューバーのイベントのみが呼び出されます。

しかし、ユーザー エクスペリエンスの観点からは、ツールバー コンポーネントのクリック イベント定義をアプリ コンポーネントのイベントで定義する必要があることは明らかです。 menubar:[] がメニュー項目を定義するとき、それがネストのレベルに関係なく、イベントのトリガーが最上位のメニューバーの親までバブルアップできることを願っています。
したがって、このメカニズムを実装するために、コンポーネント間の通信メカニズムが現在使用されています:

<a @click="onMenuItemClick(item,$event)" data-tab="{{item.tab}}" v-link="item.vlink" href="{{item.url}}" rel="external nofollow" v-if="!item.children" :class="[{&#39;active&#39;:item.active==true,&#39;disabled&#39;:item.enabled==false},item.color,&#39;item&#39;]" title="{{item.tips}}"> 
     <i class="{{ item.icon }} icon" v-if="item.icon"></i>{{item.text}} 
     <p class="ui mini {{item.labelColor }} label" v-if="item.label"> 
      {{item.label}} 
     </p> 
    </a>
ログイン後にコピー

上記はイベント @click="onMenuItemClick(item,$event)" を定義します

methods:{ 
  onMenuItemClick:function(item,$event){    
   if(this.subMenu){ 
    this.$dispatch("menuItemClick",item,$event)  
   }else{ 
    if(item.click){ 
     this.$parent.$emit(item.click,item) 
    } 
   }   
  } 
 }
ログイン後にコピー

onMenuItemClick がトリガーされると、受信したsubMenu は、クリック イベントがどのように処理されるかを確認するために使用されます。メニューバーがサブメニュー バーとして処理される場合は、イベントを上に直接バブルします。それ以外の場合、イベントは上部の親コンポーネントでトリガーされます。

コードをコピーします

コードは次のとおりです:

menubar コンポーネント内で呼び出す場合は、submenu=true を渡し、menItemClick イベント コードをリッスンします:

events:{ 
  menuItemClick:function(item,$event){ 
   if(!this.subMenu){ 
    this.$parent.$emit(item.click,item) 
   }else{ 
    return true 
   } 
  } 
 },
ログイン後にコピー

要約すると:

ドロップダウン メニューなどのネストされた構造 ツールバー、ツリー コンポーネントなどを使用する場合、各コンポーネントには独自の独立したコンテキストがあるため、内部コンポーネント間の通信を処理するにはコンポーネント通信メカニズムを使用する必要があります。

しかし、この処理方法はまだかなり面倒だと思います。理想的には、コンポーネントが親コンポーネントのコンテキストを直接使用するメカニズムを提供することが最善の公式の方法だと思います。たとえば、次のようにします。 、上のボタンには独自のコンテキストがなく、親コンポーネントのコンテキストを直接導入できるため、このパターンは多くの状況で使用する必要があります。

上記は私があなたのためにまとめたものです。

関連記事:

Angular4でのCLIのインストールと使用に関するチュートリアル

Vue2.animate.cssを使用してJSONツリーを実装する方法(詳細なチュートリアル)

vuexでアイドル状態リセットを実装する方法

以上がVue を使用してツリー コンポーネントを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue.js vs. React:プロジェクト固有の考慮事項 Vue.js vs. React:プロジェクト固有の考慮事項 Apr 09, 2025 am 12:01 AM

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

Vue Multi-Page開発とはどういう意味ですか? Vue Multi-Page開発とはどういう意味ですか? Apr 07, 2025 pm 11:57 PM

VUEマルチページ開発は、VUE.JSフレームワークを使用してアプリケーションを構築する方法です。アプリケーションは別々のページに分割されます。コードメンテナンス:アプリケーションを複数のページに分割すると、コードの管理とメンテナンスが容易になります。モジュール性:各ページは、簡単に再利用および交換するための別のモジュールとして使用できます。簡単なルーティング:ページ間のナビゲーションは、単純なルーティング構成を介して管理できます。 SEOの最適化:各ページには独自のURLがあり、SEOに役立ちます。

React vs. Vue:Netflixはどのフレームワークを使用していますか? React vs. Vue:Netflixはどのフレームワークを使用していますか? Apr 14, 2025 am 12:19 AM

netflixusesaCustomframeworkは、「ギボン」ビルトンリアクト、notreactorvuedirectly.1)チームエクスペリエンス:seice basedonfamperivity.2)projectomplerprojects:vueforsplerprojects、racefforcomplexones.3)customeforsneeds:reactofforsmorefloficailie.

VueのDivにジャンプする方法 VueのDivにジャンプする方法 Apr 08, 2025 am 09:18 AM

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

Vueにタグをジャンプする方法 Vueにタグをジャンプする方法 Apr 08, 2025 am 09:24 AM

VUEでタグのジャンプを実装する方法には、HTMLテンプレートでAタグを使用してHREF属性を指定する方法が含まれます。 VUEルーティングのルーターリンクコンポーネントを使用します。 JavaScriptでこれを使用します。$ router.push()メソッド。パラメーターはクエリパラメーターに渡すことができ、ルートは動的ジャンプのルーターオプションで構成されています。

VUEのコンポーネントジャンプを実装する方法 VUEのコンポーネントジャンプを実装する方法 Apr 08, 2025 am 09:21 AM

VUEでコンポーネントジャンプを実装するための次の方法があります。Router-Linkと&lt; router-view&gt;を使用してください。ハイパーリンクジャンプを実行し、ターゲットパスとして属性を指定するコンポーネント。 &lt; router-view&gt;を使用してください現在ルーティングされているレンダリングされているコンポーネントを表示するコンポーネント。プログラマティックナビゲーションには、router.push()およびrouter.replace()メソッドを使用します。前者は歴史を保存し、後者は記録を残さずに現在のルートに取って代わります。

Netflixのフロントエンドの反応、Vue、および未来 Netflixのフロントエンドの反応、Vue、および未来 Apr 12, 2025 am 12:12 AM

Netflixは、主にReactをフロントエンドフレームワークとして使用し、特定の機能のためにVUEによって補足されます。 1)Reactのコンポーネント化と仮想DOMは、Netflixアプリケーションのパフォーマンスと開発効率を向上させます。 2)VueはNetflixの内部ツールと小規模プロジェクトで使用されており、その柔軟性と使いやすさが重要です。

See all articles