欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例

 更新時(shí)間:2018年11月06日 14:10:58   作者:黃鑫  
學(xué)習(xí)vue有一段時(shí)間了,最近使用vue做了一套后臺(tái)管理系統(tǒng),其中使用最多就是遞歸組件,下面這篇文章主要給大家介紹了關(guān)于Vue利用遞歸實(shí)現(xiàn)樹形菜單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

什么是樹形菜單還是要簡單的啰嗦一下,比如:


上圖是截圖自elementui的實(shí)例,實(shí)現(xiàn)方式是用文檔結(jié)構(gòu)(類似像原生Dom文檔結(jié)構(gòu)的寫法)的方式,好處就是很靈活,可以方便的自定義,作為一個(gè)通用視圖組件庫這是正確的做法。

在實(shí)際的企業(yè)應(yīng)用中,菜單要比這復(fù)雜很多,層次也要多很多,如果我們采取手動(dòng)編寫文檔結(jié)構(gòu)的方式,會(huì)導(dǎo)致代碼亢長,閱讀和維護(hù)都很低效。毫無疑問所有Vuer都會(huì)想到用一個(gè)數(shù)據(jù)結(jié)構(gòu)來驅(qū)動(dòng)文檔結(jié)構(gòu)。vue-router的數(shù)據(jù)結(jié)構(gòu)恰恰就是完美的嵌套層次結(jié)構(gòu)(樹結(jié)構(gòu)),同時(shí)vue文檔中也提到了遞歸組件,基于這兩點(diǎn),我們來擼碼,不過這次有所不同,我們選擇使用render函數(shù)來實(shí)現(xiàn),而不是在模板中遞歸。

數(shù)據(jù)結(jié)構(gòu):vue-router的數(shù)據(jù)結(jié)構(gòu)

const routes = [
 {
 name: 'home',
 path: '/home',
 meta: { text: '首頁' }
 },
 {
 name: 'inner',
 path: '/inner',
 meta: { text: '內(nèi)部平臺(tái)' },
 children: [
  {
  name: 'oa',
  path: 'oa',
  meta: { text: 'OA' }
  },
  {
  name: 'jira',
  path: 'jira',
  meta: { text: 'Jira' }
  },
  {
  name: 'wiki',
  path: 'wiki',
  meta: { text: 'Wiki' }
  },
  {
  name: 'caiwu',
  path: 'caiwu',
  meta: { text: '財(cái)務(wù)' },
  children: [
   {
   name: 'chailv',
   path: 'chailv',
   meta: { text: '差旅' }
   },
   {
   name: 'richang',
   path: 'richang',
   meta: { text: '日常' },
   children: [
    {
    name: 'taxi',
    path: 'taxi',
    meta: { text: '交通' }
    },
    {
    name: 'tel',
    path: 'tel',
    meta: { text: '通信' }
    }
   ]
   }
  ]
  }
 ]
 },
 {
 name: 'sec',
 path: '/sec',
 meta: { text: '審核' },
 children: [
  {
  name: 'acl',
  path: '/acl',
  meta: { text: 'ACL' }
  }
 ]
 }
]

組件實(shí)現(xiàn):

先看看render函數(shù),其中包含一個(gè)遞歸函數(shù)elements:

render (r) {
 return r(
  'el-menu',
  {
  props: {
   backgroundColor: "#545c64",
   textColor: "#fff",
   activeTextColor: "#ffd04b"
  },
  on: {
   select: this.onSelect
  }
  },
  this.elements(this.routes, r)
 )
 }

elements函數(shù):

elements (routes, r) {
  return routes
  .map(route => {
   if (!route.paths) route.paths = []
   if (route.children && route.children.length) {
   return r(
    'el-submenu',
    {
    props: {
     index: route.name
    }
    },
    [
    r(
     'span',
     {
     slot: 'title'
     },
     [
     route.meta.text
     ]
    ),
    this.elements(route.children, r)
    ]
   )
   } else if (route.path) {
   return r(
    'el-menu-item',
    {
    props: {
     index: route.name
    }
    },
    [
    route.meta.text
    ]
   )
   } else {
   return null
   }
  })
  .filter(item => item)
 }

最終效果:


完整代碼示例請(qǐng)戳:https://codepen.io/360vislab/pen/GQqBve

總結(jié):

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 詳解vue-router 命名路由和命名視圖

    詳解vue-router 命名路由和命名視圖

    這篇文章主要介紹了詳解vue-router 命名路由和命名視圖,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • VUE3中的函數(shù)的聲明和使用

    VUE3中的函數(shù)的聲明和使用

    這篇文章主要介紹了VUE3中的函數(shù)的聲明和使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vuecli3配置代理及遇到的問題解決

    Vuecli3配置代理及遇到的問題解決

    這篇文章主要為大家介紹了Vuecli3配置代理及遇到的問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Vue和原生JS中如何使用自定義字體

    Vue和原生JS中如何使用自定義字體

    這篇文章主要為大家詳細(xì)介紹了Vue和原生JS中如何使用自定義字體,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • 優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    這篇文章主要介紹了優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 在vue3中使用el-tree-select實(shí)現(xiàn)樹形下拉選擇器效果

    在vue3中使用el-tree-select實(shí)現(xiàn)樹形下拉選擇器效果

    el-tree-select是一個(gè)含有下拉菜單的樹形選擇器,結(jié)合了?el-tree?和?el-select?兩個(gè)組件的功能,這篇文章主要介紹了在vue3中使用el-tree-select做一個(gè)樹形下拉選擇器,需要的朋友可以參考下
    2024-03-03
  • Vue Element UI 中 el-table 樹形數(shù)據(jù) tree-props 多層級(jí)使用避坑指南

    Vue Element UI 中 el-table 樹形數(shù)據(jù) 

    這篇文章主要介紹了Vue Element UI 中 el-table 樹形數(shù)據(jù) tree-props 多層級(jí)使用避坑指南,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • vue中組件通信詳解(父子組件, 爺孫組件, 兄弟組件)

    vue中組件通信詳解(父子組件, 爺孫組件, 兄弟組件)

    這篇文章主要介紹了vue中組件通信詳解(父子組件, 爺孫組件, 兄弟組件),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue利用ref屬性更改css樣式的操作方法

    Vue利用ref屬性更改css樣式的操作方法

    在Vue.js的應(yīng)用開發(fā)中,我們經(jīng)常會(huì)遇到需要?jiǎng)討B(tài)修改DOM元素樣式的情況,Vue提供了多種方式來實(shí)現(xiàn)這一目標(biāo),其中ref是一個(gè)非常有用且靈活的工具,本文將深入探討如何在Vue項(xiàng)目中利用ref屬性來更改CSS樣式,并通過多個(gè)實(shí)例演示其具體用法,需要的朋友可以參考下
    2024-10-10
  • vue-admin-template配置快捷導(dǎo)航的代碼(標(biāo)簽導(dǎo)航欄)

    vue-admin-template配置快捷導(dǎo)航的代碼(標(biāo)簽導(dǎo)航欄)

    這篇文章主要介紹了vue-admin-template配置快捷導(dǎo)航的方法(標(biāo)簽導(dǎo)航欄),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論