這篇文章給大家介紹layui遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比赤峰網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式赤峰網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋赤峰地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
一、先加載所有的主菜單,之后通過點(diǎn)擊主菜單在加載該菜單的子菜單(缺點(diǎn),如果判斷是否已經(jīng)加載過,那么動(dòng)態(tài)添加了菜單,這里顯示不出來,不判斷的話,每次點(diǎn)擊都會(huì)請(qǐng)求一次,這樣請(qǐng)求的次數(shù)就太多了,服務(wù)器不太好的話可能會(huì)成為高并發(fā)的一個(gè)原因)
二、就是以下的了,使用遞歸一次性全部加載出來(缺點(diǎn),耗費(fèi)服務(wù)器內(nèi)存)
如果動(dòng)態(tài)添加一個(gè)菜單,你當(dāng)前頁(yè)面不手動(dòng)刷新菜單不會(huì)顯示,這個(gè)問題可以考慮用websocket實(shí)現(xiàn)
首先是service層如何獲取所有的菜單(主菜單和所有的子菜單)
/** *獲取所有菜單 **/ @Override public List<MeunInfo> getParentMeun() { //獲取所有的菜單(包括子菜單和父級(jí)菜單) List<MeunInfo> list = meunDao.getParentMeun(); //創(chuàng)建一個(gè)集合用于保存所有的主菜單 List<MeunInfo> rootMeun=new ArrayList<>(); //遍歷所有菜單集合,如果是主菜單的話直接放入rootMeun集合 for (MeunInfo info:list){ //判斷為0是因?yàn)槲业闹鞑藛螛?biāo)識(shí)是0 if (info.getMeunParent()==0){ rootMeun.add(info); } } //這個(gè)是遍歷所有主菜單,分別獲取所有主菜單的所有子菜單 for (MeunInfo info:rootMeun){ //獲取所有子菜單 遞歸 List<MeunInfo> childrenList=getchildrenMeun(info.getId(),list); //這個(gè)是實(shí)體類中的子菜單集合 info.setChildrenList(childrenList); } return rootMeun; } /** * 遞歸獲取子菜單(這個(gè)我也不太理解,copy過去就行) **/ public List<MeunInfo> getchildrenMeun(int id,List<MeunInfo> allMeun){ //用于保存子菜單 List<MeunInfo> childrenList=new ArrayList<>(); for (MeunInfo info: allMeun){ //判斷當(dāng)前的菜單標(biāo)識(shí)是否等于主菜單的id if(info.getMeunParent()==id){ //如果是的話 就放入主菜單對(duì)象的子菜單集合 childrenList.add(info); } } //這里就是遞歸了,遍歷所有的子菜單 for (MeunInfo info:childrenList){ info.setChildrenList(getchildrenMeun(info.getId(),allMeun)); } //如果子菜單為空的話,那就說明某菜單下沒有子菜單了,直接返回空,子菜單為空的話就不會(huì)繼續(xù) //迭代了 if(childrenList!=null && childrenList.size()==0){ return null; } return childrenList; }
接下來是實(shí)體類
//菜單id private int id; //菜單標(biāo)題 private String meunTitle; //菜單地址 private String meunUrl; //菜單狀態(tài) private int meunStatus; //菜單標(biāo)識(shí) private int meunParent; //菜單排序 private int meunSort; //子菜單集合 private List<MeunInfo> childrenList; //get set 省略
之后你可以測(cè)試,可以拿到結(jié)果,這個(gè)自行測(cè)試
界面代碼(注意這里我是用的是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> <!--首頁(yè)容器--> <div id="index-container"> <!--信息菜單--> <div id="index-navigationbar"> <ul class="layui-nav" > <li class="layui-nav-item"> <a href="">控制臺(tái)<span class=" layui-badge">9</span></a> </li> <li class="layui-nav-item"> <a href="">個(gè)人中心<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:;" >三級(jí)菜單</a></dd> </dl> </dd> <dd><a href="">后臺(tái)模版</a></dd> <dd><a href="">電商平臺(tái)</a></dd> </dl> </li> <li class="layui-nav-item"><a href="javascript:;" >云市場(chǎng)</a></li> <li class="layui-nav-item"><a href="javascript:;" >社區(qū)</a></li>--> </ul> </div> <!--頁(yè)面選項(xiàng)卡--> <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> //注意:導(dǎo)航 依賴 element 模塊,否則無(wú)法進(jìn)行功能性操作 layui.use('element', function(){ var $ = layui.jquery ,element = layui.element; element.on('nav(demo)', function(elem){ //console.log(elem.getAttribute("meun_id")); //得到當(dāng)前點(diǎn)擊的DOM對(duì)象 var id=$(this).attr("meun_id"); if(typeof(id)!="undefined"){ console.log('進(jìn)入方法'); element.tabAdd('demo1', { title: '新選項(xiàng)'+ (Math.random()*1000|0) //用于演示 ,content: '<iframe src="test.html" scrolling="auto" frameborder="0"></iframe>' ,id: id//實(shí)際使用一般是規(guī)定好的id,這里以時(shí)間戳模擬下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ā)生錯(cuò)誤:"+ 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遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
文章名稱:layui遞歸實(shí)現(xiàn)動(dòng)態(tài)左側(cè)菜單
標(biāo)題URL:http://aaarwkj.com/article46/ipojhg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、微信小程序、面包屑導(dǎo)航、搜索引擎優(yōu)化、用戶體驗(yàn)、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)