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 prototype 使用介绍
Aug 29 Javascript
javascript中普通函数的使用介绍
Dec 19 Javascript
js仿百度音乐全选操作
Jan 13 Javascript
简单实现js倒计时功能
Feb 13 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
vue项目中mock.js的使用及基本用法
May 22 Javascript
前端插件之Bootstrap Dual Listbox使用教程
Jul 23 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
Aug 12 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 Javascript
JS实现简单贪吃蛇小游戏
Oct 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
js代码实现微博导航栏
2015/07/30 PHP
jquery 简单图片导航插件jquery.imgNav.js
2010/03/17 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
JS基于正则表达式的替换操作(replace)用法示例
2017/04/28 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
详解vue-cli3多页应用改造
2019/06/04 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python去掉空白行的多种实现代码
2018/03/19 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
Django values()和value_list()的使用
2020/03/31 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
高一学生期末评语
2014/04/25 职场文书
美容院合作经营协议书
2014/10/10 职场文书
倡议书的格式写法
2015/04/28 职场文书
办公用品管理制度
2015/08/04 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS