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 相关文章推荐
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
jQuery性能优化的38个建议
Mar 04 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
Feb 21 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
AngularJS使用ng-options指令实现下拉框
Aug 23 Javascript
C#微信小程序服务端获取用户解密信息实例代码
Mar 10 Javascript
微信小程序 request接口的封装实例代码
Apr 26 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
Oct 22 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
VUE+elementui面包屑实现动态路由详解
Nov 04 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
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源代码
2006/10/09 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
javascript Excel操作知识点
2009/04/24 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
replace()方法查找字符使用示例
2013/10/28 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
Python制作简易注册登录系统
2016/12/15 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python使用yield压平嵌套字典的超简单方法
2019/11/02 Python
python 导入数据及作图的实现
2019/12/03 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
python super()函数的基本使用
2020/09/10 Python
python利用opencv实现颜色检测
2021/02/23 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
可口可乐广告词
2014/03/20 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
护士自荐信范文
2015/03/25 职场文书