废话少说,直接上最新鲜的干货

当然,你得提前安装好bootstrap,router,element-ui,vue-axios

1.上递归组件,此处参考了某位大神的代码,具体不知道是谁,因为到处都有人用

<template>
<div> <template v-for='menu in menuList'>
<!-- 如果当前有子菜单,则显示 el-submenu ,在el-subment 里调用 递归组件 -->
<el-submenu
v-if='menu.children.length>0'
:index='menu.name'
:key="menu.id"
>
<template slot="title" >
<i :class="menu.icon"></i>
{{menu.name}}
</template>
<!-- 调用自身 此处是重点--> <MenuTree :menuList='menu.children'></MenuTree> </el-submenu>
<!-- 如果没有子菜单,则显示当前内容 -->
<el-menu-item
v-else
:index='menu.url'
:key='menu.id'
>
<i :class="menu.icon"></i>
{{menu.name}}
</el-menu-item> </template>
</div>
</template> <script>
export default {
name: "MenuTree",
props: {
menuList: {
type: Array,
required: false
}
}
}
</script> <style scoped> </style>

2.子组件菜单(Menus)

<template>

        <el-scrollbar wrap-class="scrollbar-wrapper">
<el-menu
router
mode="vertical"
background-color="#551A8B"
text-color="#FFFFFF"
active-text-color="#409EFF"
v-if="menuList"
>
<!-- <sidebar-item v-for="menu in menuList" :key="menu.id" :item="menu" />-->
<MenuTree :menuList="menuList"></MenuTree>
</el-menu>
</el-scrollbar> </template>
<script> import MenuTree from "./MenuTree";
export default {
name:'Menus',
components: { MenuTree,
},
props:{
menuList: {
type: Array,
required: false
}
}
}
</script>
<style > a {
display: inline-block;
width: 100%;
overflow: hidden;
}
.el-menu {
border: none;
height: 100%;
width: 100% !important;
}
.is-active > .el-submenu__title{
color: #f4f4f5!important;
} </style>

3.父组件(App.Vue)引用

<template>
<el-container>
<el-header>
XXXXXX
</el-header>
<el-container>
<el-aside >
<Menus :menuList="menuList"></Menus>
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</el-container>
</template> <script>
import Menus from "./views/Menus"; export default {
name: 'app',
components: {
Menus,
}, props: {
menuList: {
type: Array,
required: false
}
},
mounted(){
this.axios.get('/menu/list')
.then(resp => {
this.menuList = resp.data.menuList;
})
} }
</script> <style>
.el-header {
background-color: #0000AA;
color: #ffffff;
line-height: 60px;
font-size: 28px;
}
.el-aside {
background-color: #e3e3e3;
width: 200px !important;
} body .el-table th.gutter{
display: table-cell!important;
}
body .el-table colgroup.gutter {
display: table-cell !important;
} </style>

4.总结

递归组件得重中之重,父组件与子组件、递归组件中都有共同的props,传值的过程:父组件menuList --> 菜单组件menuList --> 递归组件使用menuList

vue+elementUI 做的递归组件的更多相关文章

  1. vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值。

    vue+elementUI项目,父组件向子组件传值,子组件向父组件传值,父子组件互相传值. vue 父组件与子组件相互通信 一.父组件给子组件传值 props 实现父组件向子组件传值. 1父组件里: ...

  2. 用HTML,Vue+element-UI做桌面UI

    DSkin封装的WebUI开发模式开发桌面应用,使用Vue很方便.使用起来有点像WPF 下面用 element-UI 做个简单的例子. 运行效果:可以自己根据需求改布局效果. 主框架的element- ...

  3. vue.js 树菜单 递归组件树来实现

    树形视图 Example: https://vuefe.cn/v2/examples/tree-view.html 参照前辈方法实现的,觉得不错,记录一下: 父组件: <!-- 菜单树 --&g ...

  4. Vue+elementUI 创建“回到顶部”组件

    1.创建"回到顶部"组件 1 <template> 2 <transition name="el-fade-in"> 3 <div ...

  5. vue element-ui 做分页功能之封装

    在 vue 项目中的 components 中 创建一个 文件夹,文件夹里创建一个 name(这个名字你随意取).vue <template>   <div class=" ...

  6. 用Vue.js递归组件构建一个可折叠的树形菜单

    在Vue.js中一个递归组件调用的是其本身,如: Vue.component('recursive-component', {   template: `<!--Invoking myself! ...

  7. Vue两种组件类型介绍:递归组件和动态组件

    一递归组件 递归组件的特性就是可以在自己的template模板中调用自己本身.值得注意的它必须设置name属性. // 递归组件 recursive.vue <template> < ...

  8. Vue.js递归组件实现动态树形菜单

    使用Vue递归组件实现动态菜单 现在很多项目的菜单都是动态生成的,之前自己做项目也是遇到这种需求,翻看了官网案例,和网上大神的案例.只有两个感觉,官网的案例太简洁,没有什么注释,看起来不太好理解,大神 ...

  9. Vue组件的操作-自定义组件,动态组件,递归组件

    作者 | Jeskson 来源 | 达达前端小酒馆 v-model双向绑定 创建双向数据绑定,v-model指令用来在input,select,checkbox,radio等表单控件.v-model指 ...

随机推荐

  1. Linux监控命令之==>iostat

    一.使用说明 iostat 是对系统的磁盘I/O 操作进行监控,它的输出主要显示磁盘读写操作的统计信息,同时给出CPU 的使用情况.同vmstat 一样,iostat 不能对某个进程进行深入分析,仅对 ...

  2. Python学习之==>URL编码解码&if __name__ == '__main__'

    一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...

  3. hibernate 1 连接数据库、操作表

    ormapping(对象关系映射):数据库操作框架 缺点: 1.因为hql语句是hibernate内部自动生成,程序员干预不了,不可把控 2.功能比较复杂时不建议使用 优点: 1.比较简单. 2.有数 ...

  4. 【BASIS系列】SAP 日志管理

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP 日志管理   前言部分 ...

  5. mysql下载与安装过程

    1:下载MySql 官网下载地址:https://dev.mysql.com/downloads/mysql/ 选择对应的下载文件.(我电脑是64位,所以这下载的是64位的下载文件) 2:解压mysq ...

  6. idea中创建maven格式的文件方法

    其中新建的maven工程有时候不全或者出一些小问题导致新建类,或者其他文件时候找不到新建的快捷方式,下面就说一种快速设置

  7. 华硕RT-AC86U路由器 AP模式实现多路由器组网,扩展主路由器的无线网范围

    描述: 宽带拨号上网的路由器为 TP-LINK  TL-WAR1200L,由于室内空间大,遂在此路由器下接入一个 华硕RT-AC86U路由器: 配置使该 华硕路由器与 TP-LINK 路由器的网段相同 ...

  8. VM CentOS建立共享文件夹实现VS Code在windows环境下go开发,在centos环境里编译

    简介 笔记本没办法更换系统,但是开发又必须在linux环境下进行,直接在vm界面环境下开发,卡的都蒙13.无奈之下想到这个法子,来解决现有尴尬的局面>>> 共分3个部分安装: (1) ...

  9. Python解释器判断整数相加溢出

    溢出,则和的最高位(即符号位)与两个加数都不相同,例如 1)非负数+非负数=负数 2)负数+负数=非负数 那么,假设x为a与b的和,((a^b)>=0 && (x^a)<0 ...

  10. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...