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" ...
随机推荐
- 为什么DW的可视化下看到的效果与浏览器的效果有所区别?
可视区不是调用外面浏览器,Dreamweav 可视化区是为用户编辑而设计. 支持最基本的 HTML 与 CSS ,对 CSS 而言,我写入样式时如果你使用最基本的样式时它显示与你浏览器中看的效果相差不 ...
- jquery的innerWidth 和 innerHeight的使用
innerWidth This method returns the width of the element, including left and right padding, in pixels ...
- span元素和div元素的浮动效果
首先看一段代码: <style> #right {margin: 10px;float:right;color:red;} #left {float:left;color:blue;} & ...
- Wireshark 基本使用方法
学习于: http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
- 在Struts2里面嵌入Spring
第一步:在web.xml中增加以下的listener <listener> <listener-class>org.springframework.web.context.Co ...
- 纯CSS3实现Metro Icon
在线演示 本地下载
- Pycurl介绍
pycurl — A Python interface to the cURL library Pycurl包是一个libcurl的Python接口.pycurl已经成功的在Python2.2到Pyt ...
- Python学习之路8☞迭代器协议和生成器
一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- shell学习(15)- eval及shell No such file or directory解决办法
eval可以读取一连串的参数,然后按照参数特性来执行.参数数目不限,彼此之间用分号隔开. eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令:如果命令中含有变量的间接 ...
- SDUT-2119_数据结构实验之链表四:有序链表的归并
数据结构实验之链表四:有序链表的归并 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 分别输入两个有序的整数序列(分别包 ...