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

vue.js與element-ui實(shí)現(xiàn)菜單樹(shù)形結(jié)構(gòu)的解決方法

 更新時(shí)間:2018年04月21日 09:10:00   作者:Yukiee  
本文通過(guò)實(shí)例給大家介紹了vue.js與element-ui實(shí)現(xiàn)菜單樹(shù)形結(jié)構(gòu),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

由于業(yè)務(wù)需要,要求實(shí)現(xiàn)樹(shù)形菜單,且菜單數(shù)據(jù)由后臺(tái)返回,在網(wǎng)上找了幾篇文章,看下來(lái)總算有了解決辦法。

場(chǎng)景:根據(jù)業(yè)務(wù)要求,需要實(shí)現(xiàn)活動(dòng)的樹(shù)形菜單,菜單數(shù)據(jù)由后臺(tái)返回,最后的效果圖如下:

后臺(tái)返回的數(shù)據(jù)格式是這個(gè)樣子的:

data=[{
 pID:'1',//父ID
 name:'目錄一',
menuID:'m1',//本身ID
              isContent:false//判斷是否是目錄
},
 {
pID:'1',
 name:'目錄二',
menuID:'m2',
              isContent:false
 },
 {
 pID:'m1',
 name:'目錄一--菜單一',
menuID:'m11',
              isContent:true
 },
 {
 pID:'m1',
 name:'目錄一--目錄一',
menuID:'m12',
              isContent:false
 },
           {
            pID:'m12',
 name:'目錄一--目錄一--菜單一',
menuID:'m121',
             isContent:true
 },
 {
 pID:'m2',
 name:'目錄二--菜單一',
menuID:'m21',
              isContent:true
 },
 {
 pID:'m2',
 name:'目錄二--菜單二',
menuID:'m22',
              isContent:true
 },
 ]

這是一串具有父子關(guān)系的數(shù)據(jù),首先就是要把這一大串?dāng)?shù)據(jù)轉(zhuǎn)化成樹(shù)形結(jié)構(gòu):

tree(){
        let data=[{
              pID:'1',//父ID
              name:'目錄一',
              menuID:'m1',//本身ID
                isContent:false//判斷是否是目錄
            },
            {
              pID:'1',
              name:'目錄二',
              menuID:'m2',
                isContent:false
            },
            {
              pID:'m1',
              name:'目錄一--菜單一',
              menuID:'m11',
                isContent:true
            },
            {
              pID:'m1',
              name:'目錄一--目錄一',
              menuID:'m12',
                isContent:false
            },
             {
                pID:'m12',
              name:'目錄一--目錄一--菜單一',
              menuID:'m121',
               isContent:true
            },
            {
              pID:'m2',
              name:'目錄二--菜單一',
              menuID:'m21',
                isContent:true
            },
            {
              pID:'m2',
              name:'目錄二--菜單二',
              menuID:'m22',
                isContent:true
            },
          ]
        let tree = []
        for(let i=0;i<data.length;i++){
          if(data[i].pID == '1'){
            let obj = data[i]
            obj.list = []
            tree.push(obj)
            data.splice(i,1)
            i--
          }
        }
        menuList(tree)
        console.log(tree)
        function menuList(arr){
          if(data.length !=0){
            for(let i=0; i<arr.length;i++){
              for(let j=0;j<data.length;j++){
                if(data[j].pID == arr[i].menuID){
                  let obj = data[j]
                  obj.list = []
                  arr[i].list.push(obj)
                  data.splice(j,1)
                  j--
                }
              }
              menuList(arr[i].list)
            }
          }
        }
      }

運(yùn)行完后返回的結(jié)構(gòu)就是這個(gè)樣子:

[{"pID":"1","name":"目錄一","menuID":"m1","isContent":false,"list":[{"pID":"m1","name":"目錄一--菜單一","menuID":"m11","isContent":true,"list":[]},{"pID":"m1","name":"目錄一--目錄一","menuID":"m12","isContent":false,"list":[{"pID":"m12","name":"目錄一--目錄一--菜單一","menuID":"m121","isContent":true,"list":[]}]}]},{"pID":"1","name":"目錄二","menuID":"m2","isContent":false,"list":[{"pID":"m2","name":"目錄二--菜單一","menuID":"m21","isContent":true,"list":[]},{"pID":"m2","name":"目錄二--菜單二","menuID":"m22","isContent":true,"list":[]}]}]

接下來(lái)就要展示了,項(xiàng)目中用的element-ui的導(dǎo)航菜單組件,為了實(shí)現(xiàn)這樣的樹(shù)形結(jié)構(gòu),將每一級(jí)的菜單單獨(dú)作為一個(gè)組件,通過(guò)判斷isContent的值來(lái)遞歸。我直接把代碼貼出來(lái)

<el-menu 
      theme="dark"
      :default-active="openMenuID"
      :default-openeds="openMenuArr"
      class="el-menu"
     @select="handleSelect">
      <template v-for="(item,index) in menuList">
         <el-submenu :index=item.menuID v-if="item.IsContent">
           <template slot="title">
          <i class="el-icon-menu"></i>
             {{item.name}}
           </template>
           <tree-menu :data="item.list"></tree-menu>
         </el-submenu>
         <el-menu-item :index=item.menuID v-else>{{item.name}}</el-menu-item>
      </template>
    </el-menu>

tree-menu組件的代碼:

<template v-for="(menu,index) in data">
      <el-submenu :index=menu.menuID v-if="menu.IsContent">
        <template slot="title">
          <i class="el-icon-plus"></i>
          {{menu.name}}</template>
        <tree-menu :data="menu.list"></tree-menu>
      </el-submenu>
      <el-menu-item v-else :index=menu.menuID>
        {{menu.name}}
      </el-menu-item>
    </template>

總結(jié)

以上所述是小編給大家介紹的vue.js與element-ui實(shí)現(xiàn)菜單樹(shù)形結(jié)構(gòu)的解決方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • 自定義vue全局組件use使用、vuex的使用詳解

    自定義vue全局組件use使用、vuex的使用詳解

    本篇文章主要介紹了自定義vue全局組件use使用、vuex的使用詳解,本文主要來(lái)講解一下怎么樣定義一個(gè)全局組件,并解釋vue.use()的原理
    2017-06-06
  • vue中router-view使用教程詳解

    vue中router-view使用教程詳解

    router-view組件作為vue最核心的路由管理組件,在項(xiàng)目中作為路由管理經(jīng)常被使用到,本文主要為大家詳細(xì)介紹了router-view具體使用,希望對(duì)大家有所幫助
    2023-12-12
  • vue組件間通信子與父詳解(二)

    vue組件間通信子與父詳解(二)

    這篇文章主要為大家詳細(xì)介紹了vue組件間通信子與父的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • vue cli升級(jí)webapck4總結(jié)

    vue cli升級(jí)webapck4總結(jié)

    這篇文章主要介紹了vue cli升級(jí)webapck4的步驟以及需要注意的地方,大家可以跟著操作學(xué)習(xí)下。
    2018-04-04
  • vue3子組件如何修改父組件傳過(guò)來(lái)的props數(shù)據(jù)

    vue3子組件如何修改父組件傳過(guò)來(lái)的props數(shù)據(jù)

    周所周知vue的props是單向數(shù)據(jù)流,可以從父組件中改變傳往子組件的props,反之則不行,下面這篇文章主要給大家介紹了關(guān)于vue3子組件如何修改父組件傳過(guò)來(lái)的props數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 如何使用vue過(guò)濾器filter

    如何使用vue過(guò)濾器filter

    這篇文章主要介紹了如何使用vue過(guò)濾器filter,對(duì)vue感興趣的同學(xué),可以參考下
    2021-05-05
  • Vue3的7種種組件通信詳情

    Vue3的7種種組件通信詳情

    Vue3兼容大部分Vue2的特性,用Vue2代碼開(kāi)發(fā)Vue3都可以,性能上面打包大小減少 41%,初次渲染快 55%,更新快 133%,內(nèi)存使用減少 54%,本篇文章主要介紹Vue3的7種種組件通信,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Vue自定義驗(yàn)證之日期時(shí)間選擇器詳解

    Vue自定義驗(yàn)證之日期時(shí)間選擇器詳解

    這篇文章主要介紹了Vue自定義驗(yàn)證之日期時(shí)間選擇器詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)

    Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)

    這篇文章主要給大家介紹了關(guān)于Vue3 setup語(yǔ)法糖銷毀一個(gè)或多個(gè)定時(shí)器(setTimeout/setInterval)的相關(guān)資料,vue是單頁(yè)面應(yīng)用,路由切換后,定時(shí)器并不會(huì)自動(dòng)關(guān)閉,需要手動(dòng)清除,當(dāng)頁(yè)面被銷毀時(shí),清除定時(shí)器即可,需要的朋友可以參考下
    2023-10-10
  • JavaScript的Vue.js庫(kù)入門(mén)學(xué)習(xí)教程

    JavaScript的Vue.js庫(kù)入門(mén)學(xué)習(xí)教程

    Vue的很多思想借鑒于Angular,但卻比較輕量和自由,這里我們整理了JavaScript的Vue.js庫(kù)入門(mén)學(xué)習(xí)教程,包括其架構(gòu)思想與核心的數(shù)據(jù)綁定方式等,需要的朋友可以參考下
    2016-05-05

最新評(píng)論