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 相关文章推荐
判断js对象是否拥有某一个属性的js代码
Aug 16 Javascript
在JS中如何调用JSP中的变量
Jan 22 Javascript
JavaScript保留两位小数的2个自定义函数
May 05 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
js限制input标签中只能输入中文
Jun 26 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 Javascript
jQuery animate easing使用方法图文详解
Jun 17 Javascript
angular实现图片懒加载实例代码
Jun 08 Javascript
React+Antd+Redux实现待办事件的方法
Mar 14 Javascript
VUE项目初建和常见问题总结
Sep 12 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 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 操作excel文件的方法小结
2009/12/31 PHP
关于访问控制的一首PHP面试题(对属性或方法的访问控制)
2012/09/13 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
angular.foreach 循环方法使用指南
2015/01/06 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
Angular-Touch库用法示例
2016/12/22 Javascript
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
python MD5加密的示例
2020/10/19 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
internal修饰符起什么作用
2013/12/16 面试题
报关报检委托书
2014/04/08 职场文书
合伙经营协议书范本
2014/04/18 职场文书
户籍证明格式
2014/09/15 职场文书
新员工考核评语
2014/12/31 职场文书
介绍信的写法
2015/01/31 职场文书
退伍军人感言
2015/08/01 职场文书
Python利用FlashText算法实现替换字符串
2022/03/31 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA