vue实现树形结构菜单(vue递归实现三级菜单)
类别:编程学习 浏览量:2518
时间:2022-03-28 01:55:52 vue实现树形结构菜单
vue递归实现三级菜单本文实例为大家分享了vue递归实现三级菜单的具体代码,供大家参考,具体内容如下
父组件
<template> <li class="menu-level-menu menu-level-menu-enter" v-if="showLevelMenu"> <menu-item class="menu-item" :menuDate="menuList"></menu-item> </li> </template>
子组件
<template> <li> <li class="" v-for="(menu, index) in menuDate" :key="index"> // 每一个菜单项 <li class="menu-row" @click="menuSpread(menu)" :class="[{'menu-row-selected': menu.selected && menu.children.length <= 0}]"> <li class="menu-row-left"> <li class="menu-row-left-line" :class="[{'menu-selected': menu.selected && menu.children.length <= 0}]"></li> <i class="iconfont" :class="[menu.menuIcon, {'color-icon': showIconColor(menu)}]"></i> </li> <li class="menu-row-right"> <span :class="[{'font-16': menu.level === '0'}]">{{menu.menuName}}</span> <i class="c" v-if="menu.children.length <= 0"></i> <i class="iconfont icon-liebiaoxiala" v-if="menu.children.length>0 && !menu.selected"></i> <i class="iconfont icon-liebiaoshouqi" v-if="menu.children.length>0 && menu.selected"></i> </li> </li> // 递归展示菜单 <menu-item v-show="menu.selected" v-if="menu.children.length>0" :menuDate="menu.children"></menu-item> </li> </li> </template> <script> export default { props: { menuDate: Array }, name: 'MenuItem', methods: { menuSpread (menu) { if (menu.menuRouter) this.$router.push(menu.menuRouter); menu.selected = !menu.selected; this.recursion(this.menuDate, menu); }, recursion (all, temp) { all.forEach(item => { if (item.menuName !== temp.menuName) { item.selected = false; this.recursion(item.children, temp); } }); }, showIconColor (menu) { let show = false; if (menu.level === '0') { menu.children.forEach(item => { if (item.children.length <= 0 && item.selected) { show = true; } if (item.children.length > 0) { item.children.forEach(item => { if (item.selected) { show = true; } }); } }); } return show; } } }; </script>
效果图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
您可能感兴趣
- vue如何获取元素(vue第一次获取不到元素的解决方法记录)
- vuex存取修改数据流程(vuex数据持久化的两种实现方案)
- vue加载html5动画(vue实现旋转木马动画)
- vue 组件布局(Vue实现固定底部组件的示例)
- vue实现双向绑定原理(vue实现双向数据绑定)
- vueelementui三级菜单(vue+element ui实现锚点定位)
- vue中怎么触发复选框的点击事件(vue点击弹窗自动触发点击事件的解决办法模拟场景)
- vue websocket实时刷新数据(Vue+WebSocket页面实时刷新长连接的实现)
- vueaxios使用教程交流(Vue使用axios图片上传遇到的问题)
- vue全局配置文件env(vue项目多环境配置.env的实现)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- vue自定义列组件(vue自定义表格列的实现过程记录)
- vue 动态绑定指令(vue动态绑定图标的完整步骤)
- vue实现pc聊天页面(vue实现web在线聊天功能)
- vue过滤器filters怎么用(如何使用vue过滤器filter)
- vue怎么操作表格(如何在在Vue3中使用markdown 编辑器组件)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
- 小米音乐与 QQ 音乐合作,便捷迁移会员(小米音乐与QQ音乐合作)
- 小米推出米兔儿童电话手表奥特曼版,799 元,支持微信 QQ(小米推出米兔儿童电话手表奥特曼版)
- 贾怀胤唱《白龙马》 炸场 了 没想到京剧还能这么玩(贾怀胤唱白龙马)
- 白龙马的改编学生版,快来看看(白龙马的改编学生版)
热门推荐
- 虚拟主机哪里有免备案(免备案云主机的真假鉴别)
- mysql数据库间的连接(MySQL中表的几种连接方式)
- 宝塔面板怎么修改内容(宝塔面板如何关闭日志)
- vmware esxi搭建云桌面(VMware ESXI服务器虚拟化搭建集群)
- dedecms关闭站点(dedecms 会员登录或者退出直接跳转到首页的修改方法)
- centos linux开机不出现登录页面(在CentOS启动时自动加载内核模块overlayfs操作)
- tornado异步编程(Tornado Web服务器中处理空白字符的解决方案)
- linuxrabbitmq安装和使用教程(用docker部署RabbitMQ环境的详细介绍)
- mysql索引失效的几种情况(MySql范围查找时索引不生效问题的原因分析)
- phpstudy显示403(phpStudy配置多站点多域名方法及遇到的403错误解决方法)