Layui 后台加载菜单栏名称以及url的例子

为了在后台管理系统中实现菜单栏的功能,我们可以使用Layui框架提供的菜单组件lay-menu。它可以实现树型和直线型两种菜单,并且可以通过数据接口来动态加载菜单项。

首先,在HTML页面中创建一个页面主体,包含一个id为menuDemo的元素,用于渲染菜单:

<body class="layui-layout-body">
    <div class="layui-layout layui-layout-admin">
        <div class="layui-header">
            <!-- 头部内容 -->
        </div>
        <div class="layui-side layui-bg-black">
            <div class="layui-side-scroll">
                <ul class="layui-nav layui-nav-tree" lay-filter="test">
                    <div id="menuDemo"></div>
                </ul>
            </div>
        </div>
        <div class="layui-body">
            <!-- 主体内容 -->
        </div>
        <div class="layui-footer">
            <!-- 底部内容 -->
        </div>
    </div>

    <!-- 引入layui框架 -->
    <script src="layui/layui.js"></script>
    <!-- 引入自定义js文件 -->
    <script src="js/main.js"></script>
</body>

其中,id为menuDemo的元素就是我们将要渲染菜单的位置。

然后,在我们的JS代码中,我们需要定义菜单项的数据格式,并通过ajax请求从后端获取菜单项的数据。假设我们的菜单项数据格式如下:

var menuData = [{
  "title": "首页",
  "icon": "fa-home",
  "spread": true,
  "children": [{
      "title": "控制台",
      "url": "console.html"
    },
    {
      "title": "表单",
      "url": "form.html"
    }
  ]
},
{
  "title": "系统管理",
  "icon": "fa-cogs",
  "spread": false,
  "children": [{
      "title": "用户管理",
      "url": "user.html"
    },
    {
      "title": "角色管理",
      "url": "role.html"
    }
  ]
}];

菜单项数据请求成功后,我们需要渲染该菜单项数据到页面上。以下是一个简单的数据渲染方法:

// 菜单项数据渲染方法
function renderMenu() {
    layui.use('element', function() {
        var element = layui.element;
        var $ = layui.jquery;
        var layer = layui.layer;

        // 清空原有菜单
        $("#menuDemo").empty();

        // 构建菜单
        layui.each(menuData, function(index, item) {
            var ulElem = $("<ul class='layui-nav-child'></ul>");
            layui.each(item.children, function(childIndex, childItem) {
                var aElem = $("<a></a>").attr("href", "#" + childItem.url).text(childItem.title);
                var liElem = $("<li></li>").append(aElem);
                ulElem.append(liElem);
            });

            var iElem = $("<i></i>").addClass("fa " + item.icon);
            var spanElem = $("<span></span>").text(item.title);
            var aElem = $("<a></a>").append(iElem).append(spanElem);
            var liElem = $("<li class='layui-nav-item'></li>").append(aElem).append(ulElem);

            if (item.spread) {
                liElem.addClass("layui-nav-itemed");
            }

            $("#menuDemo").append(liElem);
        });

        // 重新渲染菜单
        element.render("nav", "test");

        // 监听菜单点击事件
        element.on("nav(test)", function(elem) {
            var url = elem.attr("href").replace(/#/, "");
            addTab(elem.text(), url);
        });
    });
}

该方法的主要功能是,根据菜单项数据渲染出菜单,并监听菜单项的点击事件。当菜单项被点击时,该方法会调用一个addTab方法,用于在主体区域打开对应的页面。如下:

// 在主体区域打开页面
function addTab(title, url) {
    layui.use('element', function() {
        var element = layui.element;
        var $ = layui.jquery;

        var iframeElem = $("<iframe></iframe>").attr("src", url).attr("frameborder", "0").attr("class", "layui-iframe");
        var liElem = $("<li></li>").addClass("layui-this").append($("<a></a>").attr("href", "javascript:;").text(title));
        var tabElem = $(".layui-tab[lay-filter='mainTab']");

        if (tabElem.find("li[lay-id='" + url + "']").length == 0) {
            tabElem.find("li").removeClass("layui-this");
            tabElem.find(".layui-tab-item").removeClass("layui-show");

            tabElem.append(liElem);
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item").removeClass("layui-show").append(iframeElem).attr("lay-id", url);
        } else {
            tabElem.find("li[lay-id='" + url + "']").addClass(".layui-this");
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item").removeClass("layui-show");
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item[lay-id='" + url + "']").addClass("layui-show");
        }

        element.render("tab", "mainTab");
    });
}

该方法的功能是,在主体区域按“选项卡”的形式打开对应的页面。

最后,我们需要在页面的$(document).ready()回调函数中调用renderMenu方法,渲染我们的菜单:

$(document).ready(function() {
    // 渲染菜单
    renderMenu();
});

至此,我们就成功实现了一个根据菜单项数据动态渲染后台管理系统菜单的功能。

下面是一个完整的实例:

完整HTML代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Layui 后台管理系统 | 加载菜单栏名称以及url的例子</title>
    <link rel="stylesheet" href="layui/css/layui.css">
    <link rel="stylesheet" href="css/main.css">
</head>

<body class="layui-layout-body">
    <div class="layui-layout layui-layout-admin">
        <div class="layui-header">
            <!-- 头部内容 -->
        </div>
        <div class="layui-side layui-bg-black">
            <div class="layui-side-scroll">
                <ul class="layui-nav layui-nav-tree" lay-filter="test">
                    <div id="menuDemo"></div>
                </ul>
            </div>
        </div>
        <div class="layui-body">
            <div class="layui-tab layui-tab-brief layui-tab-card" lay-filter="mainTab">
                <ul class="layui-tab-title">
                    <li class="layui-this"><a href="javascript:;">首页</a></li>
                </ul>
                <div class="layui-tab-content">
                    <div class="layui-tab-item layui-show">
                        <iframe src="console.html" frameborder="0" class="layui-iframe"></iframe>
                    </div>
                </div>
            </div>
        </div>
        <div class="layui-footer">
            <!-- 底部内容 -->
        </div>
    </div>

    <!-- 引入layui框架 -->
    <script src="layui/layui.js"></script>
    <!-- 引入自定义js文件 -->
    <script src="js/main.js"></script>
</body>

</html>

完整JS代码:

// 菜单项数据请求地址
var menuDataUrl = "data/menus.json";

// 页面初始化方法
$(document).ready(function() {
    // 渲染菜单
    renderMenu();

    // 加载菜单项数据
    loadMenuData();

    // 修改默认图标样式
    $("i.layui-icon").addClass("fa fa-fw");
});

// 加载菜单项数据
function loadMenuData() {
    $.ajax({
        type: "get",
        url: menuDataUrl,
        success: function(data) {
            menuData = data;
            renderMenu();
        },
        error: function() {
            layui.use('layer', function() {
                var layer = layui.layer;
                layer.alert("加载菜单数据失败!");
            });
        }
    });
}

// 菜单项数据渲染方法
function renderMenu() {
    layui.use('element', function() {
        var element = layui.element;
        var $ = layui.jquery;
        var layer = layui.layer;

        // 清空原有菜单
        $("#menuDemo").empty();

        // 构建菜单
        layui.each(menuData, function(index, item) {
            var ulElem = $("<ul class='layui-nav-child'></ul>");
            layui.each(item.children, function(childIndex, childItem) {
                var aElem = $("<a></a>").attr("href", "#" + childItem.url).text(childItem.title);
                var liElem = $("<li></li>").append(aElem);
                ulElem.append(liElem);
            });

            var iElem = $("<i></i>").addClass("fa " + item.icon);
            var spanElem = $("<span></span>").text(item.title);
            var aElem = $("<a></a>").append(iElem).append(spanElem);
            var liElem = $("<li class='layui-nav-item'></li>").append(aElem).append(ulElem);

            if (item.spread) {
                liElem.addClass("layui-nav-itemed");
            }

            $("#menuDemo").append(liElem);
        });

        // 重新渲染菜单
        element.render("nav", "test");

        // 监听菜单点击事件
        element.on("nav(test)", function(elem) {
            var url = elem.attr("href").replace(/#/, "");
            addTab(elem.text(), url);
        });
    });
}

// 在主体区域打开页面
function addTab(title, url) {
    layui.use('element', function() {
        var element = layui.element;
        var $ = layui.jquery;

        var iframeElem = $("<iframe></iframe>").attr("src", url).attr("frameborder", "0").attr("class", "layui-iframe");
        var liElem = $("<li></li>").addClass("layui-this").append($("<a></a>").attr("href", "javascript:;").text(title));
        var tabElem = $(".layui-tab[lay-filter='mainTab']");

        if (tabElem.find("li[lay-id='" + url + "']").length == 0) {
            tabElem.find("li").removeClass("layui-this");
            tabElem.find(".layui-tab-item").removeClass("layui-show");

            tabElem.append(liElem);
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item").removeClass("layui-show").append(iframeElem).attr("lay-id", url);
        } else {
            tabElem.find("li[lay-id='" + url + "']").addClass(".layui-this");
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item").removeClass("layui-show");
            tabElem.siblings(".layui-tab-content").find(".layui-tab-item[lay-id='" + url + "']").addClass("layui-show");
        }

        element.render("tab", "mainTab");
    });
}

然后,在menu.json文件中添加菜单数据:

[{
    "title": "首页",
    "icon": "fa-home",
    "spread": true,
    "children": [{
        "title": "控制台",
        "url": "console.html"
    }, {
        "title": "表单",
        "url": "form.html"
    }]
}, {
    "title": "系统管理",
    "icon": "fa-cogs",
    "spread": false,
    "children": [{
        "title": "用户管理",
        "url": "user.html"
    }, {
        "title": "角色管理",
        "url": "role.html"
    }]
}]

注意,我们还需要在页面中引入Font Awesome字体文件的CSS样式文件,以确保菜单项中的图标能够正常渲染出来。

<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.3/css/all.min.css">

以上就是使用Layui框架实现后台管理系统中加载菜单栏名称以及url的例子的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Layui 后台加载菜单栏名称以及url的例子 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java超详细整理讲解各种排序

    Java超详细整理讲解各种排序 本文详细讲解了Java中各种排序算法的实现方式及其时间复杂度。本文内容包括以下几个部分: 排序算法分类 冒泡排序 插入排序 选择排序 归并排序 快速排序 堆排序 排序算法分类 Java中的排序算法可以按照时间复杂度从小到大分为以下三类: 时间复杂度为O(n^2)的算法:冒泡排序、插入排序、选择排序 时间复杂度为O(nlogn)…

    Java 2023年5月19日
    00
  • Java笔记(17) 反射

    需求:根据配置文件 re.properties 中指定的信息,创建对象,并调用方法classfullpath=com.hiibird.Catmethod=hi 使用现有技术能做到吗? //首先读取配置文件 Properties properties = new Properties(); File file = new File(“./Reflection/…

    Java 2023年4月17日
    00
  • Spring Boot整合Web项目常用功能详解

    下面我给你详细讲解SpringBoot整合Web项目常用功能的完整攻略: 一、概述 SpringBoot是一种可以简化Spring应用程序的创建和开发过程的框架。在Web应用程序中,常见的功能包括:前端页面开发、路由、数据接收和处理、数据持久化等。SpringBoot在这些方面均提供了相应的支持和优化,能够让Web应用的开发更加高效和方便。 二、常用功能 1…

    Java 2023年5月15日
    00
  • java基础检查和未检查异常处理详解

    Java基础检查和未检查异常处理详解 在Java开发中,异常处理是非常重要的一个方面。Java的异常分为两大类:检查异常和未检查异常。本文将详细讲解Java基础检查和未检查异常处理的完整攻略。 Java检查异常 检查异常是指在编译期就能检查出来的异常,如果不处理这些异常,编译器会报错,无法通过编译。为了避免这种情况的发生,我们必须在代码中处理这些异常。Jav…

    Java 2023年5月27日
    00
  • java运行时数据区域和类结构详解

    关于“java运行时数据区域和类结构详解”的攻略,下面是详细讲解: Java运行时数据区域 Java虚拟机在执行Java程序时,会将它所管理的内存划分成不同的数据区域,分别用于存储不同类型的数据。主要分为以下几个部分: 程序计数器 程序计数器是一块较小的内存空间,它的作用是记录当前线程执行的字节码的位置。程序计数器一般不会出现OutOfMemoryError…

    Java 2023年5月26日
    00
  • Java前后端的JSON传输方式(前后端JSON格式转换)

    下面是针对Java前后端的JSON传输方式以及前后端JSON格式转换的完整攻略。 一、JSON格式简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON格式常用于Web应用程序之间的数据传输。 1.1 JSON格式规则 在JSON中,数据格式采用键值对的形式,键值…

    Java 2023年5月26日
    00
  • Java获取当前时间方法总结

    Java获取当前时间方法总结 在Java中,有多种方法可以获取当前时间。本文将总结其中常用的方法,并提供示例代码。 方法一:使用System.currentTimeMillis() System.currentTimeMillis()方法返回当前时间的毫秒数。可以使用这个值来获取当前时间。 示例代码: long currentTimeMillis = Sys…

    Java 2023年5月20日
    00
  • java的Hibernate框架报错“UnresolvableObjectException”的原因和解决方法

    当使用Hibernate框架时,可能会遇到“UnresolvableObjectException”错误。这个错误通常是由于以下原因之一引起的: 对象不存在:如果您尝试加载一个不存在的对象,则可能会出现此错误。在这种情况下,需要确保您的对象存在于数据库中。 对象已被删除:如果您尝试加载一个已被删除的对象,则可能会出现此错误。在这种情况下,需要确保您的对象未被…

    Java 2023年5月4日
    00
合作推广
合作推广
分享本页
返回顶部