vue生成element左侧菜单
首先来总结element ui 官方文档的左侧菜单结构,带有el-submenu为子级节点,el-menu-item表示没有下级。当然,菜单不能写死,因为菜单也许不止两级,所以我们需要递归来实现。根据当前节点是否有下级去判断,如果有下级,则继续调用子级,直到没有下级为止,下面我贴上左侧菜单所有的代码:
- 请求数据格式
 
[
{
name: "首页",
id: -1,
icon: "el-icon-picture-outline-round",
url: "/index",
children: []
},
{
name: "按钮",
id: 20,
icon: "el-icon-message-solid",
url: "/button",
children: []
},
{
name: "测试1",
id: 1,
icon: "el-icon-s-claim",
url: "",
children: [
{
id: 4,
parentid: 1,
name: "测试1-1",
icon: "el-icon-chat-dot-round",
url: "",
children: [
{
id: 8,
parentid: 1,
name: "测试1-1-1",
icon: "el-icon-cloudy",
url: "/test",
children: []
},
{
id: 9,
parentid: 1,
name: "测试1-1-2",
icon: "el-icon-files",
url: "/test1",
children: []
}
]
},
{
id: 5,
parentid: 1,
name: "测试1-2",
icon: "el-icon-shopping-cart-1",
url: "/test3",
children: []
}
]
},
{
name: "测试2",
id: 2,
icon: "el-icon-menu",
url: "",
children: [
{
id: 6,
parentid: 2,
name: "测试2-1",
icon: "el-icon-folder-checked",
url: "",
children: []
},
{
id: 7,
parentid: 2,
name: "测试2-2",
icon: "el-icon-folder-remove",
url: "",
children: []
}
]
},
{
name: "测试3",
id: 3,
icon: "el-icon-monitor",
url: "",
children: []
}
]
- menu.vue
 
<template>
<div class="menu">
<div class="logo-con">
<div class="title" v-show="!collapse">
<span class="title__sider-title is-active">{{logo}}</span>
</div>
<div class="title" v-show="collapse">
<span class="title__sider-title el-tag--mini">LG</span>
</div>
</div>
<el-menu
:background-color="backgroundColor"
:text-color="textColor"
:default-active="$route.meta.pageId"
:collapse="collapse"
>
<template v-for="item in list">
<router-link :to="item.url" :key="item.id" v-if="item.children.length===0">
<el-menu-item :index="item.id.toString()">
<i :class="item.icon"></i>
<span slot="title">{{item.name}}</span>
</el-menu-item>
</router-link>
<subMenu v-else :data="item" :key="item.id"></subMenu>
</template>
</el-menu>
</div>
</template> <script>
import subMenu from "./subMenu";
export default {
name: "menuList",
components: {
subMenu
},
data() {
return {
collapse: false, //是否折叠
list: [], //当行菜单数据源
backgroundColor: "#304156", //导航菜单背景颜色
textColor: "#BFCBD9", //导航菜单文字颜色
logo: "LOGO" //logo
};
}
};
</script> <style lang="scss" scoped>
.el-menu {
border-right: none;
a {
text-decoration: none;
}
}
.logo-con {
height: 64px;
padding: 10px; .title {
position: relative;
text-align: center;
font-size: 20px;
height: 64px;
line-height: 64px; span {
padding: 0 5px 0 0;
color: #409eff;
font-size: 20px;
}
}
}
</style>
- submenu.vue
 
这里有个知识点functional,不懂自行百度,文档地址:https://cn.vuejs.org/v2/guide/render-function.html#search-query-sidebar
<!--
* @Description:
* @Author: PengYH
* @Date: 2019-08-06
-->
<template functional>
<el-submenu :index="props.data.id.toString()">
<template slot="title">
<i :class="props.data.icon"></i>
<span>{{props.data.name}}</span>
</template>
<template v-for="item in props.data.children">
<router-link :to="item.url" :key="item.id" v-if="item.children.length===0">
<el-menu-item class="subitem" :index="item.id.toString()">
<i :class="item.icon"></i>
<span slot="title">{{item.name}}</span>
</el-menu-item>
</router-link>
<sub-menu v-else :data="item" :key="item.id"></sub-menu>
</template>
</el-submenu>
</template> <script>
export default {
name: "submenu",
props: {
data: [Array, Object]
}
};
</script> <style lang="scss" scoped>
.el-submenu {
.el-menu-item {
padding: 0;
}
}
</style>
- 效果图
 

vue生成element左侧菜单的更多相关文章
- vue 首页导航+左侧菜单
		
1. Mock.js 前后端分离开发开发过程当中,经常会遇到以下几个尴尬的场景: 1. 老大,接口文档还没输出,我的好多活干不下去啊! 2. 后端小哥,接口写好了没,我要测试啊! 前后端分离之后,前端 ...
 - 使用layui-tree美化左侧菜单,点击生成tab选项
		
layui-tree美化左侧菜单 html <div class="layui-side layui-bg-black"> <div class="la ...
 - SPA项目开发之首页导航+左侧菜单
		
Mock.js: 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而mockjs就可以做到这一点 Mock.js是一个模拟数据的生成器,用来帮助前端调试开发.进行前后端的原型分离以及用 ...
 - LayUI左侧菜单无法保持选中状态
		
1.问题描述:一般的左侧菜单都会是动态添加的模块,利用循环把模块名和链接地址逐个显示出来如下图 但是问题来了,只要点任何二级菜单就不会保持左侧菜单当前一级菜单和二级菜单选中状态. 2.分析原因:因为模 ...
 - 【vue】vue使用Element组件时v-for循环里的表单项验证方法
		
转载至:https://www.jb51.net/article/142750.htm标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环?是不是有点乱?不过我相信开发中 ...
 - Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
		
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
 - vue、iview动态菜单(可折叠)
		
vue项目与iview3实现可折叠动态菜单. 菜单实现一下效果: 动态获取项目路由生成动态三级菜单导航 可折叠展开 根据路由name默认打开子目录,选中当前项 自动过滤需要隐藏的路由(例:登陆) 在手 ...
 - Vue3教程:Vue 3 + Element Plus + Vite 2 的后台管理系统开源啦
		
之前发布过一篇文章<Vue3教程:开发一个 Vue 3 + element-plus 的后台管理系统>,文中提到会开发并开源一个 Vue 3 + Element Plus 的项目供大家练手 ...
 - python : jquery实现左侧菜单
		
左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...
 
随机推荐
- springboot之mybatisplus,mp的简单理解
			
这是一张简单的service的继承图.可以看到我们的执行类,即XxxServiceImpl的继承关系. 从上到下,ServiceImpl和BaseMapper是一个依赖关系,ServiceImpl和I ...
 - [记录]python使用serial模块实现实时WebConsole
			
###tornado+websocket+多进程实现: 1.index.html <!DOCTYPE HTML> <html> <head> <style&g ...
 - 简单函数编写_strcpy、_stroverchg、_strcmp
			
字符串复制函数 void _strcpy(char *tar, const char * res) { char *p = tar; while(assert(tar && res), ...
 - Hybrid App从概念到实战
			
最近一直在准备找工作,看了很多公司的招聘介绍,有相当一部分直接写:熟悉 Hybrid App 开发加分!正好,我司开发的就有这种 Hybrid App--使用WebViewJavascriptBrid ...
 - Elasticsearch 技术分析(九):Elasticsearch的使用和原理总结
			
前言 之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次内部分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch ...
 - 爬虫的盗亦有道Robots协议
			
爬虫的规定 Robots协议 网站开发者对于网络爬虫的规范的公告,你可以不遵守可能存在法律风险,但尽量去遵守 Robots协议:在网页的根目录+robots.txt Robots协议的基本语法: #注 ...
 - Tiny Counting
			
也许更好的阅读体验 样例一 输入 4 1 4 3 2 输出 3 样例二 输入 5 9 1 0 0 5 输出 8 题解 这是本人自己想了2个半小时才想出来的方法,稍稍有点复杂但是很好理解 题目的意思就是 ...
 - 一文了解有趣的位运算(&、|、^、~、>>、<<)
			
1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中.即0.1两种状态,计算机对二进制数据进行的运算(+.-.*./)都是叫位运算,即将符号位共同参与运算的运算. 口说无凭,举一个简单的例 ...
 - PHP-- B/S结构
			
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件.这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简 ...
 - 11. Java常用类
			
1. Scanner类 1.1 基本语法 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. Scanner s = new Scanne ...