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 相关文章推荐
不同的jQuery API来处理不同的浏览器事件
Dec 09 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
Feb 01 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
Feb 12 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
vue-swiper的使用教程
Aug 30 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
浅谈Layui的eleTree树式选择器使用方法
Sep 25 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 Javascript
jQuery实现简单全选框
Sep 13 jQuery
关于vue 项目中浏览器跨域的配置问题
Nov 10 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世纪万年历
2006/12/06 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
AngularJS语法详解
2015/01/23 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
解决layer.prompt无效的问题
2019/09/24 Javascript
解决layui的radio属性或别的属性没显示出来的问题
2019/09/26 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Python分治法定义与应用实例详解
2017/07/28 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python格式化输出%s和%d
2018/05/07 Python
python正则表达式之对号入座篇
2018/07/24 Python
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
学前班教师的自我鉴定
2013/12/05 职场文书
顶碗少年教学反思
2014/02/21 职场文书
报关专员求职信范文
2014/02/22 职场文书
辞职信的写法
2015/02/27 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
七夕情人节问候语
2015/11/11 职场文书
Django显示可视化图表的实践
2021/05/10 Python