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 相关文章推荐
用js实现的抽象CSS圆角效果!!
May 03 Javascript
Javascript匿名函数的一种应用 代码封装
Jun 27 Javascript
javascript复制对象使用说明
Jun 28 Javascript
jquery parent和parents的区别分析
Oct 02 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
js实现的捐赠管理完整实例
Jan 20 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 Javascript
使用classList来实现两个按钮样式的切换方法
Jan 24 Javascript
vue+webpack实现异步组件加载的方法
Feb 03 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
Nov 01 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
详解php中的implements 使用
2017/06/13 PHP
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
基于jquery的表格排序
2010/09/11 Javascript
Javascript在IE和FireFox中的不同表现简析
2012/12/03 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
python list的index()和find()的实现
2020/11/16 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
环境科学专业大学生自荐信格式
2013/09/21 职场文书
自主实习接收函
2014/01/13 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python