在原生前端项目中使用json文件配置路由的方式,修改菜单跳转的链接就会比较方便,下面我们就来实现一下:
使用layui-nav
导航组件为例,结构分为一级二级菜单,顶部导航是一级,左侧栏菜单为二级菜单,使用iframe
来当做路由的视图,页面结构:
a
在当前目录创建一个菜单路由表menu.json,内容如下:
[
{
"caption": "菜单1",
"href": "../org/org.html",
"default": "layui-this"
},
{
"caption": "用户管理",
"href": "../user/user.html"
},
{
"caption": "xx管理"
},
{
"caption": "权限管理",
"children": [
{
"caption": "岗位设置",
"href": "../system/position/position.html"
},
{
"caption": "模块管理",
"href": "../system/log/log.html?type=16"
}
]
},
{
"caption": "系统配置",
"align": "right",
"children": [
{
"caption": "操作日志",
"href": "../system/log/log.html?type=4"
},
{
"caption": "登录日志",
"href": "../system/log/log.html?type=8"
}
]
}
]
caption
为对应菜单的文本,href
对应菜单需要跳转的地址,children
子菜单,default
是否默认选中,align
对其方式【实现读取路由json文件渲染菜单】menuRender.js
"use strict";
/**
* menuRender.js 读取菜单json并渲染
*
*/function hideSideMenuLeft() {
$(".layui-side").hide();
$(".layui-body").css("left", "0px");
};
hideSideMenuLeft();
function showSideMenuLeft() {
$(".layui-body").css("left", "20rem");
$(".layui-side").show();
}function renderLeftMenu(meunItemArr) {
var meunLeftItemArr = [];
meunItemArr.forEach(function (left_item, idx_l) {
var $menuItem = $(
'' +
(left_item.caption || "") +
' '
);
$menuItem.click(function(){
$(this).parent().find('.layui-this').removeClass('layui-this');
$(this).addClass('layui-this');
$("#appContent").attr("src", $(this).find('a').attr("data-url"));
})
meunLeftItemArr.push($menuItem);
});
$("#menu-list-left").empty().append(meunLeftItemArr);
}
$.getJSON("menu.json", function (data) {
//获取json内容并遍历开始渲染一级菜单
var meunTopItemArr = [];
data.forEach(function (top_item, idx) {
var $menuItem = $(
'' +
(top_item.caption || "") +
' '
);
if (top_item.children && top_item.children.length) {
$menuItem.data("children", top_item.children);
if (top_item.default === "layui-this") {
//如果当前默认的菜单有二级菜单需要渲染
renderLeftMenu(top_item.children);
showSideMenuLeft();
}
} else {
$menuItem.data("children", []);
}
//一级菜单绑定事件和渲染
$menuItem.click(function () {
var thisChild = $(this).data("children");
if (thisChild.length) {
renderLeftMenu(thisChild);
showSideMenuLeft();
} else {
hideSideMenuLeft();
}
$("#appContent").attr("src", $(this).find('a').attr("data-url"));
});
meunTopItemArr.push($menuItem);
});
$("#menu-list").append(meunTopItemArr);
});
$("#appContent").attr("src", "../org/org.html");
推荐阅读
- 首屏时间,你说你优化了,那你倒是计算出给给我看啊!
- 选择篇(021)-下面代码的输出是什么?
- 精读《zustand 源码》
- 浅谈js的垃圾回收机制
- 选择篇(017)-哪个选项是不正确的?
- JavaScript笔记之如何写好JavaScript
- 拉新×23,盈利可能性高出19倍,嵌入式分析到底有多香
- 厉害了,JavaScript 新提案(array.groupBy())
- 【JavaScript Weekly #554】ES2022 特性(类静态初始化块)
- 单元测试(即刻搞定!)