Vue递归菜单
一、效果图:

二、代码(Vue Cli 快速原型开发)
App.vue
<template>
<div id="app">
<template v-for="item in menus">
<!--没有子菜单的直接渲染title -->
<Menu :key="item.title" v-if="(item.children.length==0)">
<li class="title">{{item.title}}</li>
</Menu>
<!--这里还在v-for循环中,在向ReMenu子组件中传递数据是可以绑定item(分别表示menus的三个对象元素) --> <!-- 有子菜单的部分-->
<ReMenu v-else :item="item"></ReMenu>
</template>
</div> </template> <script>
import Menu from './Menu.vue'
import ReMenu from './ReMenu.vue'
export default {
name: 'app',
components: {
Menu,
ReMenu
},
data() {
return {
msg: "递归菜单",
menus: [{
"path": "/func1",
"title": "功能1",
"children": [{
"title": "功能1-1",
"children": [{
"title": "功能1-1-1",
"children": [{
"title": "功能1-1-1-1",
"children": []
},
{
"title": "功能1-1-1-2",
"children": []
}, {
"title": "功能1-1-1-3",
"children": []
},
]
},
{
"title": "功能1-1-2",
"children": []
}, {
"title": "功能1-1-3",
"children": []
},
]
}, {
"title": "功能1-2",
"children": []
}, {
"title": "功能1-3",
"children": []
}, ]
},
{
"title": "功能2",
"children": [{
"title": "功能2-1",
"children": []
}, {
"title": "功能2-2",
"children": []
}, {
"title": "功能2-3",
"children": []
}, ]
},
{
"title": "功能3",
"children": [{
"title": "功能3-1",
"children": []
}, {
"title": "功能3-2",
"children": []
}, {
"title": "功能3-3",
"children": [{
"title": "功能3-3-1",
"children": []
}, {
"title": "功能3-3-2",
"children": []
}, {
"title": "功能3-3-3",
"children": []
}]
}, ]
},
{
"title": "功能4",
"children": []
}
]
}
},
}
</script>
Menu.App
<template>
<ul>
<slot></slot>
</ul>
</template> <script>
export default {
name: "Menu",
props: ["msg","menus"]
}
</script>
MenuItem.app
<template>
<ul>
<li @click="change" class="title">
<slot name="title">默认值</slot>
</li> <li v-show="flag" style="list-style:none">
<slot name="content">默认值</slot>
</li>
</ul>
</template> <script>
export default {
name: "MenuItem",
data() {
return {
flag:false
}
},
methods: {
change(){
this.flag=!this.flag
}
},
}
</script> <style >
.title{
cursor:pointer;
}
</style>
Remenu.Vue
<template>
<MenuItem>
<template v-slot:title>
<li :key="item.title">{{item.title}}</li>
</template> <template v-slot:content>
<ul v-for="child in item.children" v-if="(child.children.length==0)">{{child.title}}</ul>
<ReMenu v-else :item="child"></ReMenu>
</template>
</MenuItem> </template>
<script>
import MenuItem from './MenuItem.vue'
export default {
// mounted() {
// console.log(this.item)
// },
name: "ReMenu",
components: {
MenuItem,
},
props: ["item"]
}
</script>
Vue递归菜单的更多相关文章
- vue路由菜单权限设置就button权限设置
路由权限的设计思路: 首先,我们的需要校验权限的路由的 url,全部由后端返回,后端会返回当前用户的路由树数组.前端在进入页面前请求接口,把数据拿到: 其次,前端会维护一个路由映射组件的列表,如果路由 ...
- vue递归组件的实现
本文链接:https://blog.csdn.net/weixin_43756060/article/details/87786344vue递归实现图片上的多级菜单 父级组件结构 <templa ...
- 多级级联数据的展示-vue递归组件
如果采用普通的for循环方式,没办法确认数据到底有几层,要写几个for循环,所以想到了递归的方法. 那么在vue里然后实现呢? vue递归组件(组件中使用自己) 父组件中把数据以props形式传给子组 ...
- vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
今天分享的不是技术,今天给大家分享个插件,针对现有的vue右键菜单插件,大多数都是需要使用插件本身自定义的标签,很多地方不方便,可扩展性也很低,所以我决定写了一款自定义指令调用右键菜单(vuerigh ...
- vue实现菜单切换
vue实现菜单切换,点击菜单导航切换不同的内容以及为当前点击的选项添加样式,或者组件. method里: css: html代码: <nav> <ul> <li> ...
- vue树形菜单
vue树形菜单 由于项目原因,没有使用ui框架上的树形菜单,所以自己动手并参考大佬的代码写了一个树形菜单的组件,话不多说,直接上代码.html代码js代码直接调用api 把请求到的数据直接赋值给per ...
- [前端随笔][Vue] 多级菜单实现思路——组件嵌套
说在前面 本篇记录学习了vue-element-admin中的多级菜单的实现 [传送门] @vue/cli 4.2.2:vuex:scss:组件嵌套 正文 创建项目 npm create 项目名 // ...
- vue 递归组件
如果你的项目里面的数据结构是一个树状的数据结构 然后递归组件是一个很好的一个解决你这个数据结构的一个方式 就是组件内部调用自身 tree.vue里面直接tree-node <tree-node& ...
- VUE递归树形目录(vue递归组件)的使用
1.html <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
随机推荐
- SpringBoot web获取请求数据【转】
SpringBoot web获取请求数据 一个网站最基本的功能就是匹配请求,获取请求数据,处理请求(业务处理),请求响应,我们今天来看SpringBoot中怎么获取请求数据. 文章包含的内容如下: 获 ...
- Sum Root to Leaf Numbers深度优先计算路径和
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- NodeJs的简介及安装
首先 分享一下NodeJs的应用场景吧: Web聊天室(IM):Express + Socket.io socket.io一个是基于Nodejs架构体系的,支持websocket的协议用于时时通信的一 ...
- 两种RBAC权限控制模型详解
序言 由于最近一直卡在权限控制这个坎上,原来设计的比较简单的权限控制思路已经无法满足比较复杂一些的场景,因此一直在探索一种在大部分场景下比较通用的权限模型. 首先,这里说明一下两种RBAC权限模型分别 ...
- 外贸电子商务网站之Prestashop 安装后台中文语言包
1.先进入到后台,我们进入Localization-> Localization2, 在下面的国家列表中,我们选择china ,导入即可. 3.进入Localization-> Trans ...
- 使用multiprocessing的问题总结
Python2中的multiprocessing模块,规避了GIL(Global Interpreter Lock)带来的多线程无法实际并发的缺点,设计了几乎与threading模块一模一样的API, ...
- Libevent:6辅助函数以及类型
在头文件<event2/util.h>中定义了许多有用的函数和类型来帮助实现可移植的程序.Libevent在内部使用这些类型和函数. 一:基本类型 evutil_socket_t 除了Wi ...
- UVa 679 【思维题】
UVA 679 紫书P148例题. 题目大意:小球从一棵所有叶子深度相同的二叉树的顶点开始向下落,树开始所有节点都为0.若小球落到节点为0的则往左落,否则向右落.并且小球会改变它经过的节点,0变1,1 ...
- jQuery 练习 dom
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU3844 Mining Your Own Business
HDU3844 Mining Your Own Business 问题描述John Digger是一个大型illudium phosdex矿的所有者.该矿山由一系列隧道组成,这些隧道在各个大型交叉口相 ...