keep-alive不能缓存多层级路由菜单问题解决


Posted in Javascript onMarch 10, 2020

这出现的原因是多级路由导致的,就是router-view嵌套 在层级不同的router-view中切换tag会出现缓存数据失效的问题。目前keep-alive可以有效缓存一级,二级的路由菜单,3级以上菜单并不能做到缓存,这里提供一个解决方案:

在cachedViews中手动加上一级菜单和三级菜单之间,缺失的二级菜单的名字,这样二级菜单下的组件就会缓存了

实列代码如下:

keep-alive不能缓存多层级路由菜单问题解决

const _import = require('@/router/_import_prodection');//获取组件的方法
import {tree} from '@/utils/treeDate'
import Layout from '@/views/layout'
import EmptyTemplate from '@/views/layout/EmptyTemplate'

export function filterAsyncRouter(routerlist) {
  const routerlists=tree(routerlist )
  //获取路由信息
  function getRouter(routerlists){
    routerlists.forEach(e => {
    // 删除无用属性
    delete e.catalogCode
    delete e.catalogOrder
    delete e.endpoints
    delete e.fullOrder
    
    // delete e.permName
    // delete e.id
    // delete e.parentId
    e.name=e.catalogName
    
    if (e.parentId === 0||e.children) {//Layout组件特殊处理
      //路径为空时会因为undefind报错,给个默认值来解决
      e.path = e.url||'nopath'
      if(e.url.split('/').length>2){
      //处理多层级路的时候给了一个空模板
        e.component = EmptyTemplate
      }else{
        e.component = Layout
      }
      e.icon='setting-fill'
      
    } else {
      e.icon='circle'
      e.component = _import(e.url)
      //路径为空时会因为undefind报错,给个默认值来解决
      e.path = e.url.split('/')[2]||'nopath'
    }
    // delete e.parentId
    delete e.url
    // if (e.redirect === '') {
    //  delete e.redirect
    // }
    
    if (e.icon !== '' && e.title !== '') { // 配置 菜单标题 与 图标
      e.meta = {
        // title: e.catalogName 中文名称
         // catalogEngName 英文名称
        title: e.catalogEngName,
        titleZh:e.catalogName,
        icon: e.icon
      }
    }
    delete e.catalogName
    delete e.icon
    delete e.title
    // delete e.name//由于名字的存在导致named 错误 删掉
    if (e.children != null) {
      // 存在子路由就递归
      getRouter(e.children)
    }
    })
    return routerlists
  }
  const getRouters=getRouter(routerlists)
    // return asyncRouterMap
    
  return getRouters
}

空模板的代码如下:

<template>
<div>
  <app-main/>
</div>
</template>
<script>
import { AppMain} from './components'
export default {
  name:'EmptyTemplate',
  components:{AppMain}
  
}
</script>

tagsViewd.js关键代码,在cachedViews中加入空模板的name

const state = {
 visitedViews: [],
 cachedViews: ['EmptyTemplate']
}

到此这篇关于keep-alive不能缓存多层级路由菜单问题解决的文章就介绍到这了,更多相关keep-alive不能多层缓存内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
文字溢出实现溢出的部分再放入一个新生成的div中具体代码
May 17 Javascript
用js模拟struts2的多action调用示例
May 19 Javascript
node.js实现快速截图
Aug 27 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
Mar 02 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
Oct 25 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
Sep 28 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
js+html实现周岁年龄计算器
Jun 25 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
Mar 10 #Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
Mar 10 #Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 #Javascript
vue实现瀑布流组件滑动加载更多
Mar 10 #Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 #Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 #Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 #Javascript
You might like
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
微信小程序签到功能
2018/10/31 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
python 多线程应用介绍
2012/12/19 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
NumPy排序的实现
2020/01/21 Python
通过cmd进入python的步骤
2020/06/16 Python
Python timeit模块原理及使用方法
2020/10/10 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
pycharm实现猜数游戏
2020/12/07 Python
python使用smtplib模块发送邮件
2020/12/17 Python
python实现代码审查自动回复消息
2021/02/01 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
文明青少年标兵事迹材料
2014/01/28 职场文书
国际贸易毕业生求职信
2014/07/20 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书