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 相关文章推荐
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
javascript实现全局匹配并替换的方法
Apr 27 Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 Javascript
JavaScript、jQuery与Ajax的关系
Jan 24 Javascript
教你JS中的运算符乘方、开方及变量格式转换
Aug 09 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
Dec 26 Javascript
收集前端面试题之url、href、src
Mar 22 Javascript
详解Vue组件之作用域插槽
Nov 22 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
Sep 01 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
Vue基于localStorage存储信息代码实例
Nov 16 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版国家代码、缩写查询函数代码
2011/08/14 PHP
PHP的PSR规范中文版
2013/09/28 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
laravel model 两表联查示例
2019/10/24 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
微信小程序实现的五星评价功能示例
2019/04/25 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
python 实时遍历日志文件
2016/04/12 Python
Queue 实现生产者消费者模型(实例讲解)
2017/11/13 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
2019/08/20 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
如何使用python代码操作git代码
2020/02/29 Python
python 下划线的不同用法
2020/10/24 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
美术教学感言
2014/02/22 职场文书
数控专业自荐书范文
2014/03/16 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
正则表达式拆分url实例代码
2022/02/24 Java/Android