最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

layui遞歸實現(xiàn)動態(tài)左側(cè)菜單

 更新時間:2019年07月26日 09:54:01   作者:執(zhí)丶筆  
這篇文章主要為大家詳細介紹了layui遞歸實現(xiàn)動態(tài)左側(cè)菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了layui遞歸實現(xiàn)動態(tài)左側(cè)菜單的具體代碼,供大家參考,具體內(nèi)容如下

我知道兩種方式實現(xiàn):

一、先加載所有的主菜單,之后通過點擊主菜單在加載該菜單的子菜單(缺點,如果判斷是否已經(jīng)加載過,那么動態(tài)添加了菜單,這里顯示不出來,不判斷的話,每次點擊都會請求一次,這樣請求的次數(shù)就太多了,服務(wù)器不太好的話可能會成為高并發(fā)的一個原因)

二、就是以下的了,使用遞歸一次性全部加載出來(缺點,耗費服務(wù)器內(nèi)存)

如果動態(tài)添加一個菜單,你當前頁面不手動刷新菜單不會顯示,這個問題可以考慮用websocket實現(xiàn)

首先是service層如何獲取所有的菜單(主菜單和所有的子菜單)

 /**
 *獲取所有菜單
 **/
 @Override
 public List<MeunInfo> getParentMeun() {
 //獲取所有的菜單(包括子菜單和父級菜單)
 List<MeunInfo> list = meunDao.getParentMeun();
 //創(chuàng)建一個集合用于保存所有的主菜單
 List<MeunInfo> rootMeun=new ArrayList<>();
 //遍歷所有菜單集合,如果是主菜單的話直接放入rootMeun集合
 for (MeunInfo info:list){
 //判斷為0是因為我的主菜單標識是0
 if (info.getMeunParent()==0){
 rootMeun.add(info);
 }
 }
 
 
 //這個是遍歷所有主菜單,分別獲取所有主菜單的所有子菜單
 for (MeunInfo info:rootMeun){
 //獲取所有子菜單 遞歸
 List<MeunInfo> childrenList=getchildrenMeun(info.getId(),list);
 //這個是實體類中的子菜單集合
 info.setChildrenList(childrenList);
 }
 return rootMeun;
 }
 
/**
* 遞歸獲取子菜單(這個我也不太理解,copy過去就行)
**/
public List<MeunInfo> getchildrenMeun(int id,List<MeunInfo> allMeun){
 //用于保存子菜單
 List<MeunInfo> childrenList=new ArrayList<>();
 for (MeunInfo info: allMeun){
 //判斷當前的菜單標識是否等于主菜單的id
 if(info.getMeunParent()==id){
 //如果是的話 就放入主菜單對象的子菜單集合
 childrenList.add(info);
 }
 }
 
 //這里就是遞歸了,遍歷所有的子菜單
 for (MeunInfo info:childrenList){
 info.setChildrenList(getchildrenMeun(info.getId(),allMeun));
 }
 
 //如果子菜單為空的話,那就說明某菜單下沒有子菜單了,直接返回空,子菜單為空的話就不會繼續(xù) 
 //迭代了
 if(childrenList!=null && childrenList.size()==0){
 return null;
 }
 return childrenList;
 }

接下來是實體類

 //菜單id
 private int id;
 //菜單標題
 private String meunTitle;
 //菜單地址
 private String meunUrl;
 //菜單狀態(tài)
 private int meunStatus;
 //菜單標識
 private int meunParent;
 //菜單排序
 private int meunSort;
 //子菜單集合
 private List<MeunInfo> childrenList;
 
 //get set 省略

之后你可以測試,可以拿到結(jié)果,這個自行測試

界面代碼(注意這里我是用的是layui)

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <link rel="stylesheet" href="css/layui.css" >
 <style type="text/css">
 #index-container,html,body{
 margin:0px;
 padding:0px;
 }
 #index-container{
 width:100%;
 height:auto;
 
 }
 
 #index-navigationbar{
 width:100%;
 height:60px;
 }
 
 #index-navigationbar ul{
 padding-left:77%;
 }
 
 #index-commonmenu{
 width: 15%;
 height:519px;
 float: left;
 }
 #indixe-tab{
 width:84.9%;
 height: 150px;
 float: right;
 }
 </style>
</head>
<body>
 <!--首頁容器-->
 <div id="index-container">
 <!--信息菜單-->
 <div id="index-navigationbar">
 <ul class="layui-nav" style="text-algin:right;background-color: black;">
 <li class="layui-nav-item">
  <a href="">控制臺<span class=" layui-badge">9</span></a>
 </li>
 <li class="layui-nav-item">
  <a href="">個人中心<span class=" layui-badge-dot"></span></a>
 </li>
 <li class="layui-nav-item" lay-unselect="">
  <a href="javascript:;" ><img src="http://t.cn/RCzsdCq" class="layui-nav-img">我</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" >修改信息</a></dd>
  <dd><a href="javascript:;" >安全管理</a></dd>
  <dd><a href="javascript:;" >退了</a></dd>
  </dl>
 </li>
 </ul>
 </div>
 
 <!--操作菜單-->
 <div id="index-commonmenu">
 <ul class="layui-nav layui-nav-tree" lay-filter="demo" style="margin-right:10px;height:538px;">
 <!-- <li class="layui-nav-item">
  <a href="javascript:;" >筆記管理</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" meun_id=1>筆記列表</a></dd>
  <dd><a href="javascript:;" >分享列表</a></dd>
  </dl>
 </li>
 <li class="layui-nav-item">
  <a href="javascript:;" >解決方案</a>
  <dl class="layui-nav-child">
  <dd>
  <a href="javascript:;" >其他</a>
  <dl class="layui-nav-child">
  <dd><a href="javascript:;" >三級菜單</a></dd>
  </dl>
  </dd>
  <dd><a href="">后臺模版</a></dd>
  <dd><a href="">電商平臺</a></dd>
  </dl>
 </li>
 <li class="layui-nav-item"><a href="javascript:;" >云市場</a></li>
 <li class="layui-nav-item"><a href="javascript:;" >社區(qū)</a></li>-->
 </ul>
 </div>
 
 <!--頁面選項卡-->
 <div id="indixe-tab">
 <div class="layui-tab" lay-allowClose="true" lay-filter="demo1" style="margin:0px;padding:0px;">
 <ul class="layui-tab-title">
 
 </ul>
 <div class="layui-tab-content" style="margin:0px;padding:0px;">
 
 </div>
 </div>
 </div>
 
 <div style="clear: both"></div>
 
 </div>
</body>
</html>
<script type="text/javascript" src="/layui.js"></script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script>
 //注意:導(dǎo)航 依賴 element 模塊,否則無法進行功能性操作
 layui.use('element', function(){
 var $ = layui.jquery
 ,element = layui.element;
 
 element.on('nav(demo)', function(elem){
 //console.log(elem.getAttribute("meun_id")); //得到當前點擊的DOM對象
 var id=$(this).attr("meun_id");
 if(typeof(id)!="undefined"){
 console.log('進入方法');
 element.tabAdd('demo1', {
  title: '新選項'+ (Math.random()*1000|0) //用于演示
  ,content: '<iframe src="test.html" style="width:100%;height:491px;" scrolling="auto" frameborder="0"></iframe>'
  ,id: id//實際使用一般是規(guī)定好的id,這里以時間戳模擬下z
 })
 element.tabChange('demo1', id);
 }
 });
 //獲取所有的菜單
 $.ajax({
 type:"GET",
 url:"http://localhost:8080/test",
 dataType:"json",
 success:function(data){
 //先添加所有的主材單
 $.each(data,function(i,obj){
  var content='<li class="layui-nav-item">';
  content+='<a href="javascript:;" >'+obj.meunTitle+'</a>';
  //這里是添加所有的子菜單
  content+=loadchild(obj);
  content+='</li>';
  $(".layui-nav-tree").append(content);
 });
 element.init();
 },
 error:function(jqXHR){
 aler("發(fā)生錯誤:"+ jqXHR.status);
 }
 });
 
 //組裝子菜單的方法
 function loadchild(obj){
 if(obj==null){
 return;
 }
 
 var content='';
 if(obj.childrenList!=null && obj.childrenList.length>0){
 content+='<dl class="layui-nav-child">';
 }else{
 content+='<dl>';
 }
 
 if(obj.childrenList!=null && obj.childrenList.length>0){
 $.each(obj.childrenList,function(i,note){
  content+='<dd>';
  content+='<a href="javascript:;" >'+note.meunTitle+'</a>';
  if(note.childrenList==null){
  return;
  }
  content+=loadchild(note);
  content+='</dd>';
 });
 
 content+='</dl>';
 }
 console.log(content);
 return content;
 }
 });
</script>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析TypeScript中的類型檢查與錯誤捕獲

    淺析TypeScript中的類型檢查與錯誤捕獲

    類型檢查是一種靜態(tài)分析的過程,用于驗證變量、函數(shù)和表達式的類型是否符合預(yù)期,這篇文章主要來和大家聊聊TypeScript中類型檢查與錯誤捕獲的相關(guān)知識,希望對大家有所幫助
    2023-06-06
  • js實現(xiàn)轉(zhuǎn)盤抽獎功能

    js實現(xiàn)轉(zhuǎn)盤抽獎功能

    這篇文章主要為大家詳細介紹了js實現(xiàn)轉(zhuǎn)盤抽獎功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解如何通過JavaScript實現(xiàn)函數(shù)重載

    詳解如何通過JavaScript實現(xiàn)函數(shù)重載

    這篇文章主要為大家詳細介紹了如何通過JavaScript實現(xiàn)函數(shù)重載,文中的示例代碼講解詳細,對我們學(xué)習(xí)JavaScript有一定的幫助,感興趣的可以了解一下
    2023-01-01
  • 教你用JS獲取Headers頭部信息

    教你用JS獲取Headers頭部信息

    這篇文章主要給大家介紹了關(guān)于用JS獲取Headers頭部信息的相關(guān)資料,頭部信息是在JavaScript中進行網(wǎng)絡(luò)請求時常用的操作,Headers 頭部信息包含了請求或響應(yīng)的元數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • JavaScript數(shù)據(jù)操作_淺談原始值和引用值的操作本質(zhì)

    JavaScript數(shù)據(jù)操作_淺談原始值和引用值的操作本質(zhì)

    下面小編就為大家?guī)硪黄狫avaScript數(shù)據(jù)操作_淺談原始值和引用值的操作本質(zhì)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Bootstrap表單Form全面解析

    Bootstrap表單Form全面解析

    在進行自己的后臺改版時,大體布局都使用了bootstrap,剩下的表單部分沒理由不去使用它,對于表單的美化和布局,bootstrap做的也是很不錯的。下文給大家介紹Bootstrap表單Form全面解析,感興趣的朋友一起看下吧
    2016-06-06
  • JavaScript如何刪除字符串中子字符串

    JavaScript如何刪除字符串中子字符串

    本文介紹了如何從?JavaScript?中的字符串中刪除子字符串,并提供了兩種常用的方法:replace()?方法和?split()?方法,結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2023-05-05
  • 使用 Opentype.js 生成字體子集的實例代碼詳解

    使用 Opentype.js 生成字體子集的實例代碼詳解

    這篇文章主要介紹了使用 Opentype.js 生成字體子集,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 匹配任意字符的正則表達式寫法

    匹配任意字符的正則表達式寫法

    今天在寫一個小應(yīng)用的時候遇到個問題,原本是想捕捉到頁面中所有電驢地址,以便迅雷抓取。
    2010-04-04
  • 微信小程序?qū)崿F(xiàn)底部導(dǎo)航

    微信小程序?qū)崿F(xiàn)底部導(dǎo)航

    這篇文章主要為大家詳細介紹了微信小程序自定義底部導(dǎo)航,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論

北碚区| 璧山县| 柳州市| 揭东县| 武义县| 伊吾县| 通化县| 泰安市| 岫岩| 舞阳县| 蓬安县| 麟游县| 瑞金市| 九寨沟县| 锡林浩特市| 惠来县| 石阡县| 祁阳县| 波密县| 鄯善县| 富蕴县| 迭部县| 桐梓县| 郑州市| 余姚市| 英超| 泾川县| 安龙县| 汶上县| 沁源县| 河西区| 延安市| 巨野县| 永清县| 昌宁县| 江源县| 石阡县| 清水河县| 商南县| 湖州市| 永平县|