Layui侧边栏需通过localStorage缓存菜单实现离线可用:联网时存入带时间戳和版本的纯展示结构JSON,离线时读取渲染并禁用动态请求,点击提示离线状态,设置24小时缓存有效期及手动刷新机制。

Layui 侧边栏本身不内置离线菜单缓存机制,但可以通过前端本地存储(localStorage 或 IndexedDB)+ 静态资源预加载方案,在无网络时还原上次成功加载的菜单结构。关键不是“实时同步”,而是“降级可用”——用户打开页面时,若检测到离线,就从本地读取并渲染缓存菜单。
菜单数据必须可序列化并持久化
侧边栏菜单通常由后端接口返回(如 /api/menu),格式多为 JSON 数组。要支持离线,需在首次联网成功获取后主动存入 localStorage:
- 建议结构扁平、不含函数或 DOM 引用,例如:
[{"id":"1","title":"仪表盘","url":"/dashboard"},{"id":"2","title":"用户管理","children":[{"id":"2-1","title":"用户列表","url":"/user/list"}]}] - 存入时加时间戳和版本标识,便于后续判断缓存有效性:
localStorage.setItem('cachedMenu', JSON.stringify({data: menuData, timestamp: Date.now(), version: '1.2'})) - 避免直接缓存含 token、动态权限字段的原始响应,应提前清洗为纯展示结构
页面加载时优先尝试离线渲染
在 layui.use(['element', 'jquery'], function(){...}) 初始化前插入离线兜底逻辑:
- 用
navigator.onLine快速判断当前联网状态 - 若为
false,立即从localStorage读取缓存菜单,解析后生成 HTML 字符串(或用layui.tree/ 手动拼)注入到.layui-side-scroll内 - 注意:此时不调用
element.render('nav'),等 DOM 插入完成后再执行,否则可能因 DOM 未就位导致渲染失败
确保离线菜单具备基础交互能力
仅展示不够,用户点击仍需响应:
- 对离线菜单的
标签,统一设置href="javascript:;",并绑定 click 事件,用layer.msg('当前离线,部分功能不可用')提示 - 若某些页面是纯静态 HTML(如
about.html、help.html),可允许跳转,前提是这些文件已随项目部署在本地路径中(非后端路由) - 避免在离线状态下触发任何
$.ajax或fetch请求,防止控制台报错打断流程
缓存更新与失效策略
不能永远依赖旧菜单,需平衡稳定性与新鲜度:
- 每次联网成功请求新菜单后,覆盖写入
localStorage,并记录更新时间 - 可设定缓存有效期(如 24 小时),下次启动时若缓存超时且离线,则清空并显示“暂无菜单”提示
- 提供手动刷新按钮(仅在线时可见),点击后强制重新拉取并更新缓存











