亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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
 },
 ]

這是一串具有父子關系的數(shù)據(jù),首先就是要把這一大串數(shù)據(jù)轉(zhuǎn)化成樹形結(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)
            }
          }
        }
      }

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

[{"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":[]}]}]

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

<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實現(xiàn)菜單樹形結(jié)構(gòu)的解決方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關文章

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

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

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

    vue中router-view使用教程詳解

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

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

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

    vue cli升級webapck4總結(jié)

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

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

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

    如何使用vue過濾器filter

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

    Vue3的7種種組件通信詳情

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

    Vue自定義驗證之日期時間選擇器詳解

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

    Vue3 setup語法糖銷毀一個或多個定時器(setTimeout/setInterval)

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

    JavaScript的Vue.js庫入門學習教程

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

最新評論