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

這篇文章給大家介紹layui遞歸實現(xiàn)動態(tài)左側(cè)菜單,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比赤峰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式赤峰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋赤峰地區(qū)。費用合理售后完善,十年實體公司更值得信賴。

一、先加載所有的主菜單,之后通過點擊主菜單在加載該菜單的子菜單(缺點,如果判斷是否已經(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" >
 <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="//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" >
 <!-- <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" >
 <ul class="layui-tab-title">
 
 </ul>
 <div class="layui-tab-content" >
 
 </div>
 </div>
 </div>
 
 <div ></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>
 //注意:導航 依賴 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"  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>

關(guān)于layui遞歸實現(xiàn)動態(tài)左側(cè)菜單就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章名稱:layui遞歸實現(xiàn)動態(tài)左側(cè)菜單
標題URL:http://bm7419.com/article46/ipojhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機微信小程序、面包屑導航搜索引擎優(yōu)化、用戶體驗、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)