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函数
Dec 22 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
Apr 06 Javascript
Bootstrap每天必学之按钮(Button)插件
Apr 25 Javascript
JavaScript实现格式化字符串函数String.format
Dec 16 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
JavaScript中的高级函数
Jan 04 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 Javascript
js回调函数原理与用法案例分析
Mar 04 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面向对象public private protected 访问修饰符
2013/06/30 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
PHP与以太坊交互详解
2018/08/24 PHP
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python字符串函数strip()原理及用法详解
2020/07/23 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
幼儿园元旦活动感言
2014/03/02 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
节约用水标语
2014/06/11 职场文书
师范生见习报告
2014/10/31 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
工程款催款函
2015/06/24 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
Android学习之BottomSheetDialog组件的使用
2022/06/21 Java/Android