1. 前言
当我们开发一个Web应用时,经常需要开发一个左侧菜单,以便让用户直接跳转到相应的页面。而使用LayuiAdmin单页版,可以轻松实现根据后台json数据动态生成左侧菜单栏。本文将详细介绍如何使用LayuiAdmin单页版实现此功能。
2. LayuiAdmin单页版介绍
2.1 什么是LayuiAdmin单页版
LayuiAdmin单页版是一款基于Layui的后台管理系统模板,它是单页应用,所有页面使用Ajax进行加载,非常适合于需要快速开发后台管理系统的开发者使用。
2.2 LayuiAdmin单页版的特点
LayuiAdmin单页版具有以下特点:
1. 单页应用,所有页面使用Ajax进行加载。
2. 支持多种布局,可以选择左侧菜单、顶部菜单等不同的布局方式。
3. 面包屑导航,可以方便地查看当前所在的页面位置。
4. 具有丰富的UI组件,包括表格、表单、提示框、弹窗等。
3. 动态生成左侧菜单栏
在LayuiAdmin单页版中,我们可以使用后台json数据动态生成左侧菜单栏。具体实现方法如下:
3.1 创建json数据文件
首先,我们需要创建一个存放菜单数据的json文件。在该文件中,每个菜单项对应一个对象,该对象包含菜单项的名称、链接地址以及子菜单等信息,如下所示:
[
{
"name": "首页",
"href": "",
"icon": "layui-icon-home",
"child": []
},
{
"name": "文章管理",
"href": "",
"icon": "layui-icon-list",
"child": [
{
"name": "文章列表",
"href": "",
"icon": "",
"child": []
}
]
},
{
"name": "用户管理",
"href": "",
"icon": "layui-icon-user",
"child": [
{
"name": "用户列表",
"href": "",
"icon": "",
"child": []
},
{
"name": "角色列表",
"href": "",
"icon": "",
"child": []
}
]
}
]
在该json文件中:
name 表示菜单项的名称。
href 表示菜单项的链接地址,这里暂时设置为空字符串。
icon 表示菜单项的图标,使用Layui的图标库。
child 表示该菜单项的子菜单,对于没有子菜单的菜单项,该属性应该为空数组。
3.2 修改index.html
在LayuiAdmin单页版中,左侧菜单是由Layui的tree组件实现的。因此,我们需要将json数据加载到tree组件中。具体代码如下(注:省略了部分代码):
<aside class="larry-side">
<div class="larry-side-menu" style="height:100%;" id="larry-side-menu"></div>
</aside>
<script>
layui.use(['element','layer','tree'],function(){
var element = layui.element(),
layer = layui.layer,
$ = layui.jquery,
tree = layui.tree;
var data = [{"name":"首页","href":"","icon":"layui-icon-home","child":[]},{"name":"文章管理","href":"","icon":"layui-icon-list","child":[{"name":"文章列表","href":"","icon":"","child":[]}]},{"name":"用户管理","href":"","icon":"layui-icon-user","child":[{"name":"用户列表","href":"","icon":"","child":[]},{"name":"角色列表","href":"","icon":"","child":[]}]}];
var layui_tree = layui.tree({
elem: '#larry-side-menu',
skin: 'sidebar',
spread: true,
click: function(item){
var href = item.href;
if(href){
$('#content').load(href);
}
},
nodes: data
});
});
</script>
在该代码中,我们首先创建了一个空的div,作为存放tree组件的容器:
<div class="larry-side-menu" style="height:100%;" id="larry-side-menu"></div>
然后,我们使用Layui的tree组件来生成左侧菜单栏,代码如下:
var layui_tree = layui.tree({
elem: '#larry-side-menu',
skin: 'sidebar',
spread: true,
click: function(item){
var href = item.href;
if(href){
$('#content').load(href);
}
},
nodes: data
});
在该代码中,我们使用tree函数生成一个tree对象,并将其存储到layui_tree变量中。该函数接收一个配置对象,其中:
elem 表示容器的id,这里使用之前创建的空的div作为容器。
skin 表示tree的皮肤,这里使用了Layui提供的sidebar样式。
spread 表示是否展开所有节点。
click 表示节点点击事件的回调函数,我们在这里获取节点的href属性,并使用jQuery将该属性值加载到名为content的div中。
nodes 表示节点数据,我们将之前创建的json数据作为nodes传递给tree组件即可。
3.3 编写菜单数据获取和更新代码
在实际开发中,我们需要从后台动态获取菜单数据,并更新左侧菜单栏。代码如下(注:省略了部分代码):
var data = [];
// 获取菜单数据
function getMenu(){
$.ajax({
url: '/api/get/menu',
dataType: 'json',
type: 'get',
success: function(res){
if(res.code == 0){
data = res.data;
layui_tree.reload({nodes: data});
}else{
layer.msg(res.msg, {icon: 2});
}
},
error: function(){
layer.msg('网络异常,请稍后重试!', {icon: 2});
}
});
}
// 更新菜单数据
function updateMenu(){
$.ajax({
url: '/api/update/menu',
dataType: 'json',
type: 'post',
data: JSON.stringify(data),
contentType: 'application/json;charset=UTF-8',
success: function(res){
if(res.code == 0){
layer.msg('更新成功!', {icon: 1});
}else{
layer.msg(res.msg, {icon: 2});
}
},
error: function(){
layer.msg('网络异常,请稍后重试!', {icon: 2});
}
});
}
在该代码中,我们定义了两个函数:
getMenu 函数用于向后台发送请求获取菜单数据,请求成功后,将返回的菜单数据更新到tree组件中。
updateMenu 函数用于向后台发送请求更新菜单数据,我们使用了JSON.stringify将菜单数据转换为JSON字符串,并设置了contentType为'application/json;charset=UTF-8'。
4. 总结
使用LayuiAdmin单页版可以轻松实现根据后台json数据动态生成左侧菜单栏。我们只需要创建一个存放菜单数据的json文件,加载该文件到tree组件中,即可生成一个动态的左侧菜单栏。在实际开发中,我们还需要实现菜单数据的获取和更新。