vue Element左侧无限级菜单实现


Posted in Javascript onJune 10, 2020

最近项目中,要用到element-ui的无限级分类菜单,根据角色生成不同的递归数据,查阅了网上很多资料,发现很多都不太完整并且没有很多的延伸性。

梳理递归数据

我们一般拿到后台的数据是:1.扁平化数据格式2.递归式数据格式

let arr = [
{
  name:小七,
  id:1
},
{
  name:小八,
  id:2
},
{
  name: 小九,
  id:3
}
]

我们从后台拿到的是这种扁平化处理数据,那我们实现递归菜单的话需要什么数据格式呢,需要格式如下:

let menuItems = [
{
  name:小七,
  id:1,
  children:[
    {
      name: '啥也不是',
      pid:2
    }
  ]
},
{
  name:小八,
  id:2,
  children:[
    {
      name:'随便写哦',
      pid:3,
      children:[
        {
          name: '再次深入',
          pid: 4,
          children:[
            {
              name: '撒打算',
              pid:666
            }
          ]
        }
      ]
    }  
  ]
},
{
  name: 小九,
  id:3
}
]

我们就需要类似于以上的这种数据格式:
扁平化数据转换递归数据,下面贴出我的数据处理方法:
注:应为在网上看到的许多的递归处理方法都不一样,有的文章写于很早很多方法都比较复杂或者代码比较多余

computed: {
  treeData() {
   let cloneData = JSON.parse(JSON.stringify(this.tableData)); // 对源数据深度克隆
   return cloneData.filter(father => {
    let branchArr = cloneData.filter(child => father.id == child.pid); //返回每一项的子级数组
    branchArr.length > 0 ? (father.children = branchArr) : ""; //如果存在子级,则给父级添加一个children属性,并赋值
    return father.pid == 0; //返回第一层
   });
  }
 },

其中this.tableData就是后台给到我的扁平化数据,这里将其替换就可以

当时处理此功能时没有考虑到子级或者父级有可能值位udfriend 所以没有做判断,如果想完善此递归数据处理的可以完善一下。

数据处理就要开始写代码了!

这里用到了vue-ement-ui的左侧菜单

老规矩,程序员交流用代码

index.vue

<el-menu
    background-color="#304156"
    text-color="#fff"
    active-text-color="#409eff"
    :collapse="isActive"
    :collapse-transition="false"
    :unique-opened="true"
    :router="true"
    :default-active="activePath"
   >
    <menu-tree :menuData="treeData" @saveNavStart="saveNavStart"></menu-tree>
   </el-menu>
   
   这里的激活样式用的是缓存的办法
   // 保存链接的激活状态
  saveNavStart(activePath) {
   window.sessionStorage.setItem("activePath", activePath);
   this.activePath = activePath;
  },
  created() {
    this.activePath = window.sessionStorage.getItem("activePath");
  }

menuTree.vue组件

实现左侧无限级菜单最重要的就是 组件自身调用自身
废话不多说,上代码:

<template>
 <div>
  <label v-for="menu in menuData" :key="menu.id">
   <el-submenu :index="String(menu.id)" v-if="menu.children">
    <template slot="title">
     <i class="el-icon-edit"></i>
     <span>{{menu.menu_name}}</span>
    </template>
    <label>
     <menutree :menuData="menu.children"></menutree>
    </label>
   </el-submenu>
   <el-menu-item :index="menu.path" @click="saveNavStart(menu.path)" v-else>
    <i class="el-icon-edit"></i>
    <span>{{menu.menu_name}}</span>
   </el-menu-item>
  </label>
 </div>
</template>

methods:{
  saveNavStart(activePath) {
    this.$emit('saveNavStart',activePath)
  }
  }
}

到此就实现了左侧菜单的无限级了,应为现在给公司写的项目都是权限功能,路由方面呢大家可以随便写,公司项目做了权限:左侧菜单,按钮限制,菜单限制,接口限制目前是四种。
本人只是一个小白,分享在项目中遇到的问题,在百度没有找到好的方法,踩坑分享出来。

到此这篇关于vue Element左侧无限级菜单实现的文章就介绍到这了,更多相关vue Element左侧无限级菜单内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
科讯商业版中用到的ajax空间与分页函数
Sep 02 Javascript
基于jquery的超简单上下翻
Apr 20 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
Jan 03 Javascript
JavaScript函数使用的基本教程
Jun 04 Javascript
JS打字效果的动态菜单代码分享
Aug 21 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
Apr 03 jQuery
vue基于element的区间选择组件
Sep 07 Javascript
对vue下点击事件传参和不传参的区别详解
Sep 15 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
js实现简单的贪吃蛇游戏
Apr 23 Javascript
详解用js代码触发dom事件的实现方案
Jun 10 #Javascript
Vue中key的作用示例代码详解
Jun 10 #Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 #Javascript
js 获取扫码枪输入数据的方法
Jun 10 #Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
Jun 10 #Javascript
使用 UniApp 实现小程序的微信登录功能
Jun 09 #Javascript
详解vue高级特性
Jun 09 #Javascript
You might like
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
javascript 关闭IE6、IE7
2009/06/01 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
js有序数组的连接问题
2013/10/01 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
Python读大数据txt
2016/03/28 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python面向对象法实现图书管理系统
2019/04/19 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
2014年元旦感言
2014/03/06 职场文书
银行委托书范本
2014/04/04 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
给公司的建议书范文
2014/05/13 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
文明倡议书
2015/01/19 职场文书
大学教师个人总结
2015/02/10 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
实体类或对象序列化时,忽略为空属性的操作
2021/06/30 Java/Android
Mysql如何查看是否使用到索引
2022/12/24 MySQL