详解layuiAdmin单页版根据后台json数据动态生成左侧菜单栏

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组件中,即可生成一个动态的左侧菜单栏。在实际开发中,我们还需要实现菜单数据的获取和更新。