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』取指定url格式及分割函数应用
Apr 22 Javascript
Jquery插件分享之气泡形提示控件grumble.js
May 20 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
May 08 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
Spring Boot/VUE中路由传递参数的实现代码
Mar 02 Javascript
vue2.0 路由不显示router-view的解决方法
Mar 06 Javascript
浅入深出Vue之组件使用
Jul 11 Javascript
vue页面跳转实现页面缓存操作
Jul 22 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
global.php
2006/12/09 PHP
PHP实现下载功能的代码
2012/09/29 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
javascript document.images实例
2008/05/27 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
jquery插件Jplayer使用方法简析
2016/04/22 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
深入了解js原型模式
2019/05/30 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
下载糗事百科的内容_python版
2008/12/07 Python
python:接口间数据传递与调用方法
2018/12/17 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
老同学聚会感言
2014/02/23 职场文书
自我鉴定标准格式
2014/03/19 职场文书
质量保证书范本
2014/04/29 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年教研员工作总结
2014/12/23 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
公司管理制度范本
2015/08/03 职场文书
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL