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 相关文章推荐
捕获关闭窗口的脚本
Jan 10 Javascript
js或者jquery判断图片是否加载完成实现代码
Mar 20 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
Dec 29 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
vue2.0 elementUI制作面包屑导航栏
Feb 22 Javascript
浅析Vue 生命周期
Jun 21 Javascript
jQuery无冲突模式详解
Jan 17 jQuery
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 Javascript
vue的hash值原理也是table切换实例代码
Dec 14 Vue.js
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
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
浅谈php扩展imagick
2014/06/02 PHP
php获取网页里所有图片并存入数组的方法
2015/04/06 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python3多线程操作简单示例
2018/05/22 Python
Python 一句话生成字母表的方法
2019/01/02 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
举例讲解Python装饰器
2020/12/24 Python
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
阿波罗盒子:Apollo Box
2017/08/14 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
党员培训思想汇报
2014/01/07 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
小学生检讨书大全
2014/02/06 职场文书
十佳青年事迹材料
2014/08/21 职场文书
教师四风问题整改措施
2014/09/25 职场文书
自荐信格式模板
2015/03/27 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
毕业论文致谢格式模板
2015/05/14 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android