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中怎么实现左侧菜单和树形图递归”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341