vue左侧菜单,树形图递归实现代码


Posted in Javascript onAugust 24, 2018

学习vue有一段时间了,最近使用vue做了一套后台管理系统,左侧菜单需求是这样的,可以多层,数据由后台传递。也因为自己对官方文档的不熟悉使得自己踩了不少坑,今天写出来和大家一起分享。

效果图如下所示:

vue左侧菜单,树形图递归实现代码

先说说遇到的坑,由于是子父组件,当时传递使用的是子父组件的传递,但是这时候只能获取到第一层的数据,第二层往后获取不到数据,踩了一下午坑以后才知道,子组件使用了递归组件,这时候他已经不能往父组件传递了,子传父,只能逐层传递这时候已经隔层了,所以我使用了非子父组件传递,两个页面都引入bus.js,这里不懂的请百度。

bus.js

import Vue from 'vue'
export default new Vue

父组件内容

<ul v-for="menuItem in theModel">
<my-tree :model="menuItem"></my-tree>
</ul>

模拟后台数据

theModel:[{
 'id': '1',
 'menuName': '导航1',
 'menuCode': '10',
'menuUrl':'',
 'childMenus': [
 {
 'menuName': '用户管理',
 'menuCode': '11',
'menuUrl':'/home',
'menuPath':'',
'childMenus':[{
 'menuName': '11111',
 'menuCode': '12',
'menuUrl':'/systemjuri',
'menuPath':'',
 'childMenus': []
 }]
 },
 {
 'menuName': '角色管理',
 'menuCode': '12',
'menuUrl':'/systemjuri',
'menuPath':'',
 'childMenus': []
 },
 {
 'menuName': '菜单管理',
'menuUrl':'/systemmenu',
 'menuCode': '13',
'menuPath':'http://10.63.195.214:8080/menuManage/html/index_3.html',
'childMenus':[]
 }]
 },{
'id': '1',
 'menuName': '导航2',
 'menuCode': '10',
 'childMenus':[]
}],

父组件引入子组件

import myTree from './treeMenu.vue'
export default {
  components: {
  myTree
  },
}

父组件接受子组件传递的数据

bus.$on("childEvent", function(transmit) {})

下面是子组件内容,子组件名称treeMenu,name: 'treeMenu',

<template>
<li>
<span @click="toggle(model.menuName,model.menuUrl,model.menuPath)">
<i v-if="!isFolder" class="icon file-text">●</i>
{{ model.menuName }}
<i v-if="isFolder" class="icon" :class="[open ? 'folder-open': 'folder']"></i>
</span>
<ul v-show="open" v-if="isFolder">
<tree-menu v-for="item in model.childMenus" :model="item" :key="item.menuId"></tree-menu>
</ul>
</li>
</template>
<script>
import bus from "./../../../static/js/bus";
export default {
name: 'treeMenu',
props: ['model'],
data() {
return {
open: false,
}
},
computed: {
isFolder() {
return this.model.childMenus && this.model.childMenus.length
}
},
methods: {
toggle(msg,menuUrl,menuPath) {
if (this.isFolder) {
this.open = !this.open
}
var json = { msg: msg, menuUrl: menuUrl,menuPath:menuPath };
bus.$emit("childEvent", json)
},
}
}
</script>
<style>
ul {
list-style: none;
}
i.icon {
display: inline-block;
width: 15px;
height: 15px;
background-repeat: no-repeat;
vertical-align: middle;
float: right;
margin-top: 17px;
margin-right:30px;
}
.icon.folder {
background-image: url('./homeimg/left_1.png');
}
.icon.folder-open {
background-image: url('./homeimg/dowm_1.png');
}
.icon.file-text {
}
ul li ul li .icon.folder {
background-image: url('./homeimg/left_2.png');
}
ul li ul li .icon.folder-open {
background-image: url('./homeimg/down_2.png');
}
.tree-menu li {
line-height: 50px;
}
span{
display: block;
width: 100%;
height: 100%;
}
ul{
padding-left:10px;
}
ul li span{
text-indent: 10px;
}
ul li ul{
background:#ebf1f8;
color:#1457a7;
}
li:hover{
cursor:pointer;
}
</style>

由于用了递归组件所以name需要和<tree-menu>对应起来

总结

以上所述是小编给大家介绍的vue左侧菜单,树形图递归实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(4)
Dec 23 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
使用JavaScript 实现的人脸检测
Mar 24 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
javascript常用的方法整理
Aug 20 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
jQuery EasyUI中DataGird动态生成列的方法
Apr 05 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
Jul 10 Javascript
Vue 创建组件的两种方法小结(必看)
Feb 23 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 Javascript
微信小程序onShareTimeline()实现分享朋友圈
Jan 07 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
Aug 24 #jQuery
element-ui中的select下拉列表设置默认值方法
Aug 24 #Javascript
vue 登录滑动验证实现代码
Aug 24 #Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
Aug 24 #Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
Aug 24 #Javascript
element-ui表格数据转换的示例代码
Aug 24 #Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 #Javascript
You might like
php面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
jquery 3D球状导航的文章分类
2010/07/06 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
写给小白看的JavaScript异步
2017/11/29 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
python正则表达式面试题解答
2020/04/28 Python
Python流程控制 while循环实现解析
2019/09/02 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Python Django搭建网站流程图解
2020/06/13 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
基于Python实现粒子滤波效果
2020/12/01 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
高三自我评价
2014/02/01 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
建议书的格式及范文
2015/09/14 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript