最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

開發(fā)Vue樹形組件的示例代碼

 更新時間:2017年12月21日 09:27:55   作者:stonefisher  
本篇文章主要介紹了開發(fā)Vue樹形組件的示例代碼,它展現(xiàn)了組件的遞歸使用。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了Vue樹形組件的示例代碼,分享給大家,具體如下:

使用SemanticUI和vue做一個menubar組件,實現(xiàn)方法大概是這樣的:

<template> 
  <div 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}} 
     <div class="ui mini {{item.labelColor }} label" v-if="item.label"> 
      {{item.label}} 
     </div> 
    </a>  
   //如果有有children則說明是下拉菜單項,然后遞歸調(diào)用自身 
    <template v-else="item.children.length > 0"> 
     <div class="ui dropdown item"> 
      <i class="{{ item.icon }} icon" v-if="item.icon"></i>   
      <div class="text"> {{item.text}}</div> 
      <menubar :items="item.children" ></menubar> 
     </div> 
    </template> 
   </template> 
  //顯示在右側(cè)的菜單項,也是遞歸調(diào)用自身 
   <menubar :items="rightItems" v-if="rightItems.length > 0"></menubar> 
  </div> 
</template> 

使用時,假如父組件app使用到了menubar組件,那么data中需要定義一下items數(shù)據(jù),例 :

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:"設(shè)置",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:"#"} 
        ] 
      } 
   ] 

里面的click事件是定義了,當在工具欄中單擊時的事件,理想的情況應(yīng)該是事件定義在父組件app的events里面,像這樣:

events:{ 
  eventa:function(){....}, 
  eventb:function(){....}, 
} 

工具欄組件是根據(jù)傳入的items來生成的,包括里面的子組件。最終工具欄組件的結(jié)構(gòu)就是一個樹狀結(jié)構(gòu),例似這樣的:

MenuBar
--MenuBar                   
----MenuBar
-----MenuBar
--Menubar

由于每個工具欄組件里面的每個Menubar均有自己的上下文,這樣當子組件Menubar的click事件觸發(fā)時并不會調(diào)用到頂層app組件events里面定義的事件,而只是調(diào)用了父Menubar的events事件。

但是在使用體驗上,很明顯,工具欄組件的點擊事件定義應(yīng)該是定義在app組件的events里面的才是合理。我們希望menubar:[]定義菜單項時,不管多少級嵌套,事件的觸發(fā)均可以冒泡到最上面的menubar的父上面。
因此,要實現(xiàn)該機制,目前是采用組件之間的通訊機制來實現(xiàn)的:

<a @click="onMenuItemClick(item,$event)" data-tab="{{item.tab}}" v-link="item.vlink" href="{{item.url}}" rel="external nofollow" v-if="!item.children" :class="[{'active':item.active==true,'disabled':item.enabled==false},item.color,'item']" title="{{item.tips}}"> 
     <i class="{{ item.icon }} icon" v-if="item.icon"></i>{{item.text}} 
     <div class="ui mini {{item.labelColor }} label" v-if="item.label"> 
      {{item.label}} 
     </div> 
    </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觸發(fā)時,我們根據(jù)傳入的subMenu來確認點擊事件如何處理,如果Menubar是作為子菜單欄處理,則我們就直接向上冒泡事件,否則就在上層父組件觸發(fā)事件。

復制代碼 代碼如下:
<menubar  @menuItemClick="onMenuItemClick" :items="rightItems" sub-menu="true" v-if="rightItems.length > 0"></menubar>

在menubar組件內(nèi)部調(diào)用時就傳入submenu=true,并且偵聽事件menuItemClick,menuItemClick事件代碼這樣:

events:{ 
  menuItemClick:function(item,$event){ 
   if(!this.subMenu){ 
    this.$parent.$emit(item.click,item) 
   }else{ 
    return true 
   } 
  } 
 }, 

小結(jié)一下:

在處理嵌套結(jié)構(gòu)的組件,如具有下拉菜單的工具欄、樹形組件等時,由于組件內(nèi)部均具有各自獨立的上下文,因此必須使用組件通訊機制來處理內(nèi)部組件間的通訊。

但如此處理方式,我覺得還是比較麻煩的,理想的方式,我覺得最好的官方可以為組件提供一個直接使用父組件上下文的機制,例如:

<MenuBar> 
 <button scoped="false"></button> 
<button scoped="false"></button> 
</MenuBar> 

這樣上面的button就沒有自己的上下文,而可以直接引入父組件的上下文,這樣模式應(yīng)該在很多場合均會使用到的。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 細說Vue組件的服務(wù)器端渲染的過程

    細說Vue組件的服務(wù)器端渲染的過程

    這篇文章主要介紹了細說 Vue 組件的服務(wù)器端渲染,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • vue如何動態(tài)設(shè)置背景漸變色

    vue如何動態(tài)設(shè)置背景漸變色

    這篇文章主要介紹了vue如何動態(tài)設(shè)置背景漸變色問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 基于Vue實現(xiàn)消息提示功能

    基于Vue實現(xiàn)消息提示功能

    這篇文章主要為大家詳細介紹了如何基于Vue實現(xiàn)簡單的消息提示功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-10-10
  • vue3緩存頁面keep-alive及路由統(tǒng)一處理詳解

    vue3緩存頁面keep-alive及路由統(tǒng)一處理詳解

    當我們不想每次跳轉(zhuǎn)路由都會重新加載頁面時(重新加載頁面很耗時),就可以考慮使用keep-alive緩存頁面了,這篇文章主要給大家介紹了關(guān)于vue3緩存頁面keep-alive及路由統(tǒng)一處理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Vue.js 帶下拉選項的輸入框(Textbox with Dropdown)組件

    Vue.js 帶下拉選項的輸入框(Textbox with Dropdown)組件

    這篇文章主要介紹了Vue.js 帶下拉選項的輸入框(Textbox with Dropdown)組件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Vuex總體案例詳解

    Vuex總體案例詳解

    這篇文章主要介紹了Vuex總體案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • vue使用axios實現(xiàn)文件上傳進度的實時更新詳解

    vue使用axios實現(xiàn)文件上傳進度的實時更新詳解

    最近在學習axios,然后項目就用到了,所以這篇文章主要給大家介紹了關(guān)于vue中利用axios實現(xiàn)文件上傳進度的實時更新的相關(guān)資料,文中先對axios進行了簡單的介紹,方法大家理解學習,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • Vue Autocomplete 自動完成功能簡單示例

    Vue Autocomplete 自動完成功能簡單示例

    這篇文章主要介紹了Vue Autocomplete 自動完成功能,結(jié)合簡單示例形式分析了Vue使用el-autocomplete組件實現(xiàn)自動完成功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • vue中element 的upload組件發(fā)送請求給后端操作

    vue中element 的upload組件發(fā)送請求給后端操作

    這篇文章主要介紹了vue中element 的upload組件發(fā)送請求給后端操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 詳解Vue-axios 設(shè)置請求頭問題

    詳解Vue-axios 設(shè)置請求頭問題

    這篇文章主要介紹了Vue-axios 設(shè)置請求頭問題,文中給大家提到了axios設(shè)置請求頭內(nèi)容的方法,需要的朋友可以參考下
    2018-12-12

最新評論

漳浦县| 阿瓦提县| 枞阳县| 麻栗坡县| 观塘区| 墨江| 兴仁县| 沂源县| 轮台县| 汝城县| 莱阳市| 荃湾区| 枞阳县| 聂拉木县| 谷城县| 门头沟区| 江源县| 永春县| 吴忠市| 遵化市| 开鲁县| 嵊泗县| 青冈县| 太和县| 东乌珠穆沁旗| 来宾市| 淳化县| 安新县| 乌兰察布市| 海原县| 恩施市| 临高县| 香格里拉县| 文化| 荔波县| 五莲县| 大连市| 嘉义市| 普格县| 静安区| 资源县|