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 相关文章推荐
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
JS格式化数字保留两位小数点示例代码
Oct 15 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
Jun 20 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
理解javascript中的原型和原型链
Jul 30 Javascript
js检测用户输入密码强度
Oct 22 Javascript
javascript中获取class的简单实现
Jul 12 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
Bootstrap面板使用方法
Jan 16 Javascript
JS Select下拉框(支持输入模糊查询)
Feb 04 Javascript
使用D3.js构建实时图形的示例代码
Aug 28 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
Oct 12 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
我的论坛源代码(五)
2006/10/09 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
Sanic框架蓝图用法实例分析
2018/07/17 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Python之多进程与多线程的使用
2021/02/23 Python
小学信息技术教学反思
2014/02/10 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
SpringBoot工程下使用OpenFeign的坑及解决
2021/07/02 Java/Android