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

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

場景:根據(jù)業(yè)務(wù)要求,需要實現(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
 },
 ]

這是一串具有父子關(guān)系的數(shù)據(jù),首先就是要把這一大串?dāng)?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的導(dǎo)航菜單組件,為了實現(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)的解決方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • VUE中setTimeout和setInterval自動銷毀案例

    VUE中setTimeout和setInterval自動銷毀案例

    這篇文章主要介紹了VUE中setTimeout和setInterval自動銷毀案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 在Vue當(dāng)中同時配置多個路由文件的方法案例代碼

    在Vue當(dāng)中同時配置多個路由文件的方法案例代碼

    這篇文章主要介紹了在Vue當(dāng)中同時配置多個路由文件的方法,包含具體代碼,本文分步驟結(jié)合示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Vue中component標(biāo)簽解決項目組件化操作

    Vue中component標(biāo)簽解決項目組件化操作

    這篇文章主要介紹了Vue中component標(biāo)簽解決項目組件化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 在Vue3.x中實現(xiàn)類似React.lazy效果的方法詳解

    在Vue3.x中實現(xiàn)類似React.lazy效果的方法詳解

    React 的 React.lazy 功能為組件懶加載提供了原生支持,允許開發(fā)者將組件渲染推遲到實際需要時再進行,雖然 Vue3.x 沒有一個直接對應(yīng)的 lazy 函數(shù),但我們可以通過動態(tài)導(dǎo)入和 defineAsyncComponent 方法來實現(xiàn)類似的效果,需要的朋友可以參考下
    2024-03-03
  • el-select自定義指令實現(xiàn)觸底加載分頁請求options數(shù)據(jù)(完整代碼和接口可直接用)

    el-select自定義指令實現(xiàn)觸底加載分頁請求options數(shù)據(jù)(完整代碼和接口可直接用)

    某些情況下,下拉框需要做觸底加載,發(fā)請求,獲取option的數(shù)據(jù),下面給大家分享el-select自定義指令實現(xiàn)觸底加載分頁請求options數(shù)據(jù)(附上完整代碼和接口可直接用),感興趣的朋友參考下吧
    2024-02-02
  • 示例詳解Vue中控制組件的掛載位置

    示例詳解Vue中控制組件的掛載位置

    在 Vue 中,append-to-body=“true” 主要用于一些第三方組件(如 Element UI 或 Ant Design Vue 中的彈出框、下拉菜單等)來控制組件的掛載位置,本文介紹Vue中控制組件的掛載位置,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • vue中axios的get請求和post請求的傳參方式、攔截器示例代碼

    vue中axios的get請求和post請求的傳參方式、攔截器示例代碼

    Post是向服務(wù)器提交數(shù)據(jù)的一種請求,get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請求,post在真正接受數(shù)據(jù)之前會先將請求頭發(fā)送給服務(wù)器進行確認,然后才真正發(fā)送數(shù)據(jù),本文給大家介紹vue中axios的get請求和post請求的傳參方式、攔截器示例代碼,感興趣的朋友一起看看吧
    2023-10-10
  • vue+element下日期組件momentjs轉(zhuǎn)換賦值問題解決

    vue+element下日期組件momentjs轉(zhuǎn)換賦值問題解決

    這篇文章主要介紹了vue+element下日期組件momentjs轉(zhuǎn)換賦值問題,記錄下使用momentjs轉(zhuǎn)換日期字符串賦值給element的日期組件報錯問題,需要的朋友可以參考下
    2024-02-02
  • Vue生命周期詳解

    Vue生命周期詳解

    這篇文章詳細介紹了Vue的生命周期,文中通過代碼示例介紹的非常詳細。對大家的學(xué)習(xí)有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue使用drag與drop實現(xiàn)拖拽的示例代碼

    vue使用drag與drop實現(xiàn)拖拽的示例代碼

    本篇文章主要介紹了vue使用drag與drop實現(xiàn)拖拽的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

化德县| 连南| 涟源市| 尉犁县| 洛阳市| SHOW| 石楼县| 松潘县| 金寨县| 饶阳县| 社旗县| 莲花县| 榆林市| 偃师市| 阳原县| 文山县| 龙州县| 柘城县| 北辰区| 昌宁县| 武夷山市| 竹山县| 张家川| 卓资县| 钟祥市| 阿巴嘎旗| 龙门县| 西乌| 柯坪县| 措勤县| 深州市| 遂溪县| 油尖旺区| 岳池县| 久治县| 佛坪县| 边坝县| 容城县| 长宁区| 高青县| 莱芜市|