首页 > 其他分享 >layuiAdmin动态生成菜单并递归显示

layuiAdmin动态生成菜单并递归显示

时间:2024-01-29 11:32:38浏览次数:23  
标签:layuiAdmin obj 递归 title layui list content 菜单 icon


先给出菜单请求回来的json格式:

除去外面的code和msg外,data内容是一个[]数组;每个数组里面是一个对象;有4个参数,一个标题(title),一个图标(icon),一个请求地址(url),最后还可能有个子集(list)。

{
  "code": 0,
  "msg": "",
  "data": [{
    "title": "一级滑块组件",
    "icon": "layui-icon-auz",
    "url": "component/slider/index.html"
  },{
    "title": "二级",
    "icon": "layui-icon-home",
    "list": [{
      "title": "评分",
      "icon": "layui-icon-app",
      "url": "component/rate/index.html"
    }, {
      "title": "轮播",
      "icon": "layui-icon-console",
      "url": "component/carousel/index.html"
    }]
  },{
    "title": "三级",
    "icon": "layui-icon-home",
    "list": [{
      "title": "三级3",
      "icon": "layui-icon-home",
      "url": "component/colorpicker/index.html",
      "list":[{
        "title":"流加载",
        "icon": "layui-icon-tips",
        "url":"component/flow/index.html"
      },{
        "title":"工具",
        "icon": "layui-icon-print",
        "url":"component/util/index.html"
      }]
    },{
      "title": "代码修饰",
      "icon": "layui-icon-note",
      "url": "component/code/index.html"
    },{
      "title": "百度",
      "icon": "layui-icon-note",
      "url": "https://www.baidu.com"
    },{
      "title": "网易",
      "icon": "layui-icon-note",
      "url": "https://www.163.com"
    }]
  }]
}


index.html页面中,我保留了第一个菜单

layuiAdmin动态生成菜单并递归显示_ci


在index.html后面的js脚本中


  <script src="../res/layui/layui.js"></script>
  <script>
  layui.config({
    base: '../res/' // 静态资源所在路径
  }).use(['index'],function () {
    let $ = layui.$;
    let layer = layui.layer;
    let element = layui.element;
    
    $.ajax({
      url: "/json/a.json",
      type: "GET",
      dataType: "json",
      success: function (res) {
        layer.alert(JSON.stringify(res));
        console.log("res:" + JSON.stringify(res));
        let lists = res.data;
        //先添加所有的主材单
        $.each(res.data, function(i, obj) {
          console.log(obj);
          let content='<li class="layui-nav-item" data-name='+obj.action+'>';
          //判断是否存在下一级栏目,存在就不跳转,不存在就跳转
          if (obj.list == undefined) {
            content+='<a lay-href="' + obj.url+ '"><i class="layui-icon '+obj.icon+'"></i><cite>'+obj.title+'</cite></a>';
          } else {
            content+='<a href="javascript:;"><i class="layui-icon '+obj.icon+'"></i><cite>'+obj.title+'</cite></a>';
          }
          //这里是添加所有的子菜单
          content+=loadchild(obj);
          content+='</li>';
          $(".layui-nav-tree").append(content);
        });
        element.init();
      },
      error: function (jqXHR) {
        alert("请求菜单失败,发生错误:"+ jqXHR.status);
        layer.alert(JSON.stringify("请求菜单失败"));
      }
    });


    function loadchild(obj) {
      if(obj==null){
        return;
      }
      let content='';
      if(obj.list!=null && obj.list.length>0){
        content+='<dl class="layui-nav-child">';
      }else{
        content+='<dl>';
      }

      if(obj.list!=null && obj.list.length>0){
        $.each(obj.list,function(i,note) {
          content += '<dd>';
          // content += '<a lay-href="' + note.url + '">' + note.title + '</a>';
          if (note.list == undefined) {
            content+='<a lay-href="' + note.url+ '"><i class="layui-icon '+note.icon+'"></i><cite>'+note.title+'</cite></a>';
          } else {
            content+='<a href="javascript:;"><i class="layui-icon '+note.icon+'"></i><cite>'+note.title+'</cite></a>';
          }
          if (note.list == null) {
            return;
          }
          content += loadchild(note);
          content += '</dd>';
        });
        content+='</dl>';
      }
      return content;
    }




  });
  </script>


效果如下:

layuiAdmin动态生成菜单并递归显示_ico_02

layuiAdmin动态生成菜单并递归显示_html_03


附带代码解释:

打开index.html

ajax请求菜单json,返回数据;

在ajax请求里面第一次对返回json菜单进行解析处理,你们内部有个loadchild()函数对对子菜单等进行处理,这里直接进行了递归;



标签:layuiAdmin,obj,递归,title,layui,list,content,菜单,icon
From: https://blog.51cto.com/lenglingx/9461855

相关文章

  • 小字辈(递归找根节点)
    7-3小字辈分数25全屏浏览题目切换布局作者 陈越单位 浙江大学本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数N(不超过100000的正整数)——简单起见,我们把家族成员从1到N编号。随后第二行......
  • 死锁和递归锁
    死锁(1)介绍死锁是指两个或多个进程,在执行过程中,因争夺资源而造成了互相等待的一种现象。即两个或多个进程持有各自的锁并试图获取对方持有的锁,从而导致被阻塞,不能向前执行,最终形成僵局。在这种情况下,系统资源利用率极低,系统处于一种死循环状态。fromthreadingimportThrea......
  • 数据结构与算法:递归算法
    递归算法什么是递归?函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,可以很容易地解决某些问题。此类问题的示例包括汉诺塔(TOH)、中序/先序/后序树遍历、图的DFS递归函数通过调用自身的副本并解决原始问题的较小子问题来解决特定问题。需要时可以生......
  • [office] Excel如何下拉菜单自动关联数据?Excel下拉自动关联数据的方法
    Excel是一款制作表格非常的方便的办公软件,很多小伙伴都喜欢使用,不过当遇到需要多重选择的列表时,不少小伙伴就不清楚要如何将下拉菜单中的数据进行关联,那么下面就和小编一起来看看Excel表格下拉自动关联数据的方法吧。Excel下拉自动关联数据的方法 1、首先先选择如图......
  • 递归搜索文件
    1publicstaticvoidmain(String[]args){2searchFile(newFile("F:/"),"logFile-data.log");3}45privatestaticvoidsearchFile(Filefile,StringfileName){6//判断file是否是目录7if(file!=......
  • 记录--左右菜单联动
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助对于左右菜单联动的需求是很常见的在小程序里,主要表现为:点击左侧的菜单栏,右侧会切换到对应的内容区域滑动右侧的内容,左侧会自动切换到对应的菜单项主要利用的是scroll-view标签,以及相关的一些API,可参考:uniapp......
  • MFC 右击菜单 右键菜单
    点击鼠标左键会出现弹式菜单:▲弹出菜单//鼠标左键按下voidCMy05_MenuView::OnLButtonDown(UINTnFlags,CPointpoint){//获取主菜单//CMenu*menu=GetMenu();//这个会直接报错//创建菜单项需要新创建一个,不能再视图直接获取框架的那个菜单CM......
  • MFC 菜单路由事件,按钮可用不可用
    点击b会切换a可用状态:添加Menu选项a对应IDID_DEMO_A,b对应IDID_DEMO_B。弹式菜单无法编辑ID。▲右键添加事件处理程序▲路由传递路径frame给到view如果view处理好了,就返回给frame;如果没处理的话,view会给这个路由消息给doc,如果doc没有处理,再返回给......
  • python多级菜单纯循环与分支
    python_多级菜单_纯循环与分支源代码:#!/usr/bin/python3__author__='beimenchuixue'__blog__='http://www.cnblogs.com/2bjiujiu/'defmenu(message):print('按q返回上一层')print('按e退出')ec='q'......
  • Python循环三级菜单
    Python循环三级菜单选择城市》选择区》选择区内的公司等三级菜单循环#coding=utf-8#Version:python3.6#Name:shiweidata={'北京':{'海淀':{'五道口':{'soho':{},'网易':{},......