您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

vue.js+element-ui做出菜单树形结构

2025/6/25 6:45:24发布39次查看
这次给大家带来vue.js+element-ui做出菜单树形结构,vue.js+element-ui做出菜单树形结构的注意事项有哪些,下面就是实战案例,一起来看一下。
由于业务需要,要求实现树形菜单,且菜单数据由后台返回,在网上找了几篇文章,看下来总算有了解决办法。
场景:根据业务要求,需要实现活动的树形菜单,菜单数据由后台返回,最后的效果图如下:
后台返回的数据格式是这个样子的:
data=[{ pid:'1',//父id name:'目录一',menuid:'m1',//本身idiscontent: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 }, ]
这是一串具有父子关系的数据,首先就是要把这一大串数据转化成树形结构:
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) } } } }
运行完后返回的结构就是这个样子:
[{"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的导航菜单组件,为了实现这样的树形结构,将每一级的菜单单独作为一个组件,通过判断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>
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
微信小程序做出外卖菜单点单功能
security.js+rsa做出加密功能
以上就是vue.js+element-ui做出菜单树形结构的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product