本文實例為大家分享了layui遞歸實現動態左側菜單的具體代碼,供大家參考,具體內容如下
我知道兩種方式實現:
一、先加載所有的主菜單,之后通過點擊主菜單在加載該菜單的子菜單(缺點,如果判斷是否已經加載過,那么動態添加了菜單,這里顯示不出來,不判斷的話,每次點擊都會請求一次,這樣請求的次數就太多了,服務器不太好的話可能會成為高并發的一個原因)
二、就是以下的了,使用遞歸一次性全部加載出來(缺點,耗費服務器內存)
如果動態添加一個菜單,你當前頁面不手動刷新菜單不會顯示,這個問題可以考慮用websocket實現
首先是service層如何獲取所有的菜單(主菜單和所有的子菜單)
/** *獲取所有菜單 **/ @Override public List<MeunInfo> getParentMeun() { //獲取所有的菜單(包括子菜單和父級菜單) List<MeunInfo> list = meunDao.getParentMeun(); //創建一個集合用于保存所有的主菜單 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)); } //如果子菜單為空的話,那就說明某菜單下沒有子菜單了,直接返回空,子菜單為空的話就不會繼續 //迭代了 if(childrenList!=null && childrenList.size()==0){ return null; } return childrenList; }接下來是實體類
//菜單id private int id; //菜單標題 private String meunTitle; //菜單地址 private String meunUrl; //菜單狀態 private int meunStatus; //菜單標識 private int meunParent; //菜單排序 private int meunSort; //子菜單集合 private List<MeunInfo> childrenList; //get set 省略
之后你可以測試,可以拿到結果,這個自行測試
界面代碼(注意這里我是用的是layui)
新聞熱點
疑難解答
圖片精選