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 相关文章推荐
一些易混淆且不常用的属性,希望有用
Jan 29 Javascript
JQery 渐变图片导航效果代码 漂亮
Jan 01 Javascript
基于jquery自定义图片热区效果
Jul 21 Javascript
用正则表达式替换图片地址img标签
Nov 22 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
Javascript判断图片尺寸大小实例分析
Jun 16 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
jQuery实现的背景颜色渐变动画效果示例
Mar 24 jQuery
手机端转换rem适应
Apr 01 Javascript
vue文件运行的方法教学
Feb 12 Javascript
vue或react项目生产环境去掉console.log的操作
Sep 02 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存储cookie的示例
2014/03/31 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
JavaScript 指导方针
2007/04/05 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
论文评语大全
2014/04/29 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
消防演习通知
2015/04/25 职场文书
百万英镑观后感
2015/06/09 职场文书
三国演义读书笔记
2015/06/25 职场文书
2015年乡镇食品安全工作总结
2015/10/22 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
vue中data里面的数据相互使用方式
2022/06/05 Vue.js