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 Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
清除div下面的所有标签的方法
Feb 17 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
Mar 30 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
Jul 12 Javascript
AngularJS基础 ng-model 指令详解及示例代码
Aug 02 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
Vue 无限滚动加载指令实现方法
May 28 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 curl实现抓取302跳转后页面的示例
2014/07/04 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
精通Javascript系列之Javascript基础篇
2011/06/07 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
微信小程序form表单组件示例代码
2018/07/15 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python编程实现蚁群算法详解
2017/11/13 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
python标准库OS模块详解
2020/03/10 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
python中有函数重载吗
2020/05/28 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
python 录制系统声音的示例
2020/12/21 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
员工培训邀请函
2014/01/11 职场文书
试用期转正员工自我评价
2014/09/18 职场文书
运动会班级前导词
2015/07/20 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python