Vue递归实现树形菜单方法实例


Posted in Javascript onNovember 06, 2018

什么是树形菜单还是要简单的??乱幌拢?热纾?/p>

Vue递归实现树形菜单方法实例

上图是截图自elementui的实例,实现方式是用文档结构(类似像原生Dom文档结构的写法)的方式,好处就是很灵活,可以方便的自定义,作为一个通用视图组件库这是正确的做法。

在实际的企业应用中,菜单要比这复杂很多,层次也要多很多,如果我们采取手动编写文档结构的方式,会导致代码亢长,阅读和维护都很低效。毫无疑问所有Vuer都会想到用一个数据结构来驱动文档结构。vue-router的数据结构恰恰就是完美的嵌套层次结构(树结构),同时vue文档中也提到了递归组件,基于这两点,我们来撸码,不过这次有所不同,我们选择使用render函数来实现,而不是在模板中递归。

数据结构:vue-router的数据结构

const routes = [
 {
 name: 'home',
 path: '/home',
 meta: { text: '首页' }
 },
 {
 name: 'inner',
 path: '/inner',
 meta: { text: '内部平台' },
 children: [
  {
  name: 'oa',
  path: 'oa',
  meta: { text: 'OA' }
  },
  {
  name: 'jira',
  path: 'jira',
  meta: { text: 'Jira' }
  },
  {
  name: 'wiki',
  path: 'wiki',
  meta: { text: 'Wiki' }
  },
  {
  name: 'caiwu',
  path: 'caiwu',
  meta: { text: '财务' },
  children: [
   {
   name: 'chailv',
   path: 'chailv',
   meta: { text: '差旅' }
   },
   {
   name: 'richang',
   path: 'richang',
   meta: { text: '日常' },
   children: [
    {
    name: 'taxi',
    path: 'taxi',
    meta: { text: '交通' }
    },
    {
    name: 'tel',
    path: 'tel',
    meta: { text: '通信' }
    }
   ]
   }
  ]
  }
 ]
 },
 {
 name: 'sec',
 path: '/sec',
 meta: { text: '审核' },
 children: [
  {
  name: 'acl',
  path: '/acl',
  meta: { text: 'ACL' }
  }
 ]
 }
]

组件实现:

先看看render函数,其中包含一个递归函数elements:

render (r) {
 return r(
  'el-menu',
  {
  props: {
   backgroundColor: "#545c64",
   textColor: "#fff",
   activeTextColor: "#ffd04b"
  },
  on: {
   select: this.onSelect
  }
  },
  this.elements(this.routes, r)
 )
 }

elements函数:

elements (routes, r) {
  return routes
  .map(route => {
   if (!route.paths) route.paths = []
   if (route.children && route.children.length) {
   return r(
    'el-submenu',
    {
    props: {
     index: route.name
    }
    },
    [
    r(
     'span',
     {
     slot: 'title'
     },
     [
     route.meta.text
     ]
    ),
    this.elements(route.children, r)
    ]
   )
   } else if (route.path) {
   return r(
    'el-menu-item',
    {
    props: {
     index: route.name
    }
    },
    [
    route.meta.text
    ]
   )
   } else {
   return null
   }
  })
  .filter(item => item)
 }

最终效果:

Vue递归实现树形菜单方法实例

完整代码示例请戳:https://codepen.io/360vislab/pen/GQqBve

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 Javascript
jQuery中的常用事件总结
Dec 27 Javascript
10个实用的脚本代码工具
May 04 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
jquery退出each循环的写法
Feb 26 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
react-native-tab-navigator组件的基本使用示例代码
Sep 07 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
VUE+node(express)实现前后端分离
Oct 13 Javascript
MutationObserver在页面水印实现起到的作用详解
Jul 07 Javascript
electron中使用bootstrap的示例代码
Nov 06 #Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 #Javascript
浅谈Vue数据响应思路之数组
Nov 06 #Javascript
Vue项目中最新用到的一些实用小技巧
Nov 06 #Javascript
详解Vue内部怎样处理props选项的多种写法
Nov 06 #Javascript
微信小程序实现选项卡效果
Nov 06 #Javascript
Vue props 单向数据流的实现
Nov 06 #Javascript
You might like
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
destoon二次开发入门示例
2014/06/20 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
jQuery 三击事件实现代码
2013/09/11 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
详解JavaScript基于面向对象之继承
2015/12/13 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
浅谈Python里面小数点精度的控制
2018/07/16 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
numpy数组广播的机制
2019/07/12 Python
Pandas分组与排序的实现
2019/07/23 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
Keras搭建自编码器操作
2020/07/03 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
CheapTickets香港机票预订网站:CheapTickets.hk
2019/06/26 全球购物
一道Delphi面试题
2016/10/28 面试题
工程专业毕业生自荐信范文
2013/12/25 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
七年级作文之英语老师
2019/10/28 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android