Element NavMenu动态生成导航菜单
为了演示方便,不从数据库获取了

{
"data":[
{
"id":125,
"authName":"用户管理",
"path":"users",
"children":[
{
"id":110,
"authName":"用户列表",
"path":"users",
"children":[
],
"order":null
}
],
"order":1
},
{
"id":103,
"authName":"权限管理",
"path":"rights",
"children":[
{
"id":111,
"authName":"角色列表",
"path":"roles",
"children":[
],
"order":null
},
{
"id":112,
"authName":"权限列表",
"path":"rights",
"children":[
],
"order":null
}
],
"order":2
},
{
"id":101,
"authName":"商品管理",
"path":"goods",
"children":[
{
"id":104,
"authName":"商品列表",
"path":"goods",
"children":[
],
"order":1
},
{
"id":115,
"authName":"分类参数",
"path":"params",
"children":[
],
"order":2
},
{
"id":121,
"authName":"商品分类",
"path":"categories",
"children":[
],
"order":3
}
],
"order":3
},
{
"id":102,
"authName":"订单管理",
"path":"orders",
"children":[
{
"id":107,
"authName":"订单列表",
"path":"orders",
"children":[
],
"order":null
}
],
"order":4
},
{
"id":145,
"authName":"数据统计",
"path":"reports",
"children":[
{
"id":146,
"authName":"数据报表",
"path":"reports",
"children":[
],
"order":null
}
],
"order":5
}
],
"meta":{
"msg":"获取菜单列表成功",
"status":200
}
}
导航原始Json
组件文档地址:https://element.eleme.cn/#/zh-CN/component/menu
全局导入及设置
import element from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from 'axios'
Vue.use(element, axios)
Vue.prototype.$http = axios
NavMenu结构 (default-active当前激活菜单ID,index菜单唯一标志),目录结构清楚了,v-for循环即可,子菜单循环父菜单的children
<el-menu default-active="11">
<el-submenu index="1">
<!-- 一级导航 -->
<template slot="title">
<span>导航一</span>
</template>
<!-- 子导航 -->
<el-menu-item index="11">
<span slot="title">子导航一</span>
</el-menu-item>
<el-menu-item index="12">
<span slot="title">子导航二</span>
</el-menu-item>
<el-menu-item index="13">
<span slot="title">子导航三</span>
</el-menu-item>
</el-submenu>
</el-menu>
json返回格式

Vue页面全部代码
<template>
<el-row>
<el-col :span="24">
<el-menu default-active="0">
<el-submenu
:index="item.id + ''"
v-for="item in menuList"
:key="item.id"
>
<template slot="title">
<span>{{ item.authName }}</span>
</template>
<el-menu-item
:index="subItem.id + ''"
v-for="subItem in item.children"
:key="subItem.id"
>
<span slot="title">{{ subItem.authName }}</span>
</el-menu-item>
</el-submenu>
</el-menu>
</el-col>
</el-row>
</template> <script>
export default {
name: "about",
data() {
return {
menuList: [],
};
},
created() {
this.getMenuList();
},
methods: {
getMenuList() {
this.$http.get("menus").then((res) => {
console.log(res);
if (res.data.meta.status !== 200) {
this.$message({
message: res.data.meta.msg,
type: "error",
});
}
this.menuList = res.data.data;
});
},
},
};
</script>
<style scoped>
.el-row {
width: 200px;
}
</style>
菜单展示

菜单设置好需要链接到相关页面,Menu属性中增加router即可(是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转),但需要更改上述菜单的ID为path

<template>
<el-row>
<el-col :span="24">
<el-menu default-active="0" unique-opened router>
<el-menu-item index="0">
<template slot="title">
<i class="el-icon-s-home"></i>
<router-link to="/home">首页</router-link>
</template>
</el-menu-item>
<el-submenu
:index="'/' + item.path"
v-for="item in menuList"
:key="item.id"
>
<template slot="title">
<i class="el-icon-s-promotion"></i>
<span>{{ item.authName }}</span>
</template>
<el-menu-item
:index="'/' + subItem.path"
v-for="subItem in item.children"
:key="subItem.id"
>
<i class="el-icon-menu"></i>
<span slot="title">{{ subItem.authName }}</span>
</el-menu-item>
</el-submenu>
</el-menu>
</el-col>
</el-row>
</template>
更改后菜单代码
注: unique-opened 是否只保持一个子菜单的展开
Element NavMenu动态生成导航菜单的更多相关文章
- JQuery实现动态生成树形菜单
jQuery实现动态生成树形菜单 有一个需求:菜单导航条需要依据不同的权限动态提取出来.计划是将功能模块与用户权限之间的关系保持到一个配置表中.所以功能菜单的话就需要动态提取出来再显示.借助jquer ...
- jquery 根据后台传递过来的三维数组动态生成三级菜单
根据后台传递过来的三维数组动态生成三级菜单 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- jQuery ui背景色动态渐变导航菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 应用rbac组件 动态生成一级菜单
动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...
- 用C#从数据库动态生成AdminLTE菜单的一种方法
当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template). 此核心文件开源在Github:https://g ...
- MVC5+EF6 入门完整教程13 -- 动态生成多级菜单
稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...
- ASP.NET MVC动态生成网站菜单及子菜单
在开发ASP.NET MVC网站时,Insus.NET想实现动态产生网站的主菜单及子菜单. 你需要在网站管理后台管理此2张表(Menu,SubMenu)的信息,添加,删除,编辑,更新等. Sequen ...
- 用jq动态给导航菜单添加active
点击后页面跳转到了新的链接,找到所有的li下的a标签,对其链接地址进行判断,如果和当前浏览器的地址一致,就认为是当前应该激活的菜单,添加active类,否则就取消. <ul class=&quo ...
- django中动态生成二级菜单
一.动态显示二级菜单 1.修改权限表结构 (1)分析需求,要求左侧菜单如下显示: 客户管理: 客户列表 账单管理: 账单列表 (2)修改rbac下的models.py,修改后代码如下: from dj ...
随机推荐
- Java互联网架构师系统进阶课程 (一)【享学】
2.线程的并发工具类 Fork-Join 什么是分而治之? 规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到 ...
- Windows服务器如何磁盘分区,Windows服务器磁盘分区常见的三种
原文来自:https://www.sohu.com/a/272133008_100217178 我怕链接会失效,故转载此篇文章,解析得很透彻,一目了然!记录. -------------------- ...
- AcWing 第11场周赛题解
计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...
- 小白学vue第四天,从入门到放弃(vue指令的使用加高阶函数)
v-on修饰符的使用 .stop 阻止事件冒泡 调用 stopPropagation() .prevent 阻止默认事件 调用 event.preventDefault() .keyCode 键盘事 ...
- HCIA-网络层IP地址
TCP/IP 每一层关联性 网络接口层-->TYPE 上层的网络层 --> Protocol -->不同的传输层协议 DSAP SSAP IP地址 剩下的8个字节 IPV4地址 4个 ...
- 《高性能利器》-32张图带你解决RocketMQ所有场景问题
一.RocketMQ的基本原理 RocketMQ基本架构图如下 从这个架构图上我们可以知道,RocketMQ有4块核心部分: NameServer:管理Broker的信息,让使用MQ的系统感知到集群里 ...
- MongoDB实例重启失败探究(大事务Redo导致)
1.实例重启背景 收到监控组同学反馈,连接某一个MongoDB实例的应用耗时异常,并且出现了超时.查看数据库监控平台,发现此实例服务器的IO异常飙升,而查看副本集状态(rs.status()),主从是 ...
- 服务启动shell脚本
#!/bin/sh JarDir=`pwd` do_start() { echo "pandora-login start ..." nohup java -jar -Xmn256 ...
- Tag Helper 标签助手
简介 标签助手是Razor 页面中自动生成HTML语句的可重用组件.标签助手对应特定的HTML标签,ASP.NET Core 包含大量与HTML标签对应的预定义标签助手. Razor页面中的标签助手作 ...
- Apache/Nginx/IIS 访问日志详解
Apache日志详解 1.Apache日志文件名称及所在路径 日志文件一般都是保存在在apache/logs目录下,实际情况可以根据Apache的配置文件去查找日志文件所在的路径. 例如phpstud ...