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实现pager控件示例
Apr 09 Javascript
javascript异步处理工作机制详解
Apr 13 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
JavaScript严格模式详解
Nov 18 Javascript
JS遍历页面所有对象属性及实现方法
Aug 01 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 Javascript
angularJs中datatable实现代码
Jun 03 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
javascript中的this作用域详解
Jul 15 Javascript
layui表格 列自动适应大小失效的解决方法
Sep 06 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
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
VSCode 配置uni-app的方法
2020/07/11 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python构建深度神经网络(DNN)
2018/03/10 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
教师自我评价范文
2013/12/16 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
联谊活动策划书
2014/01/26 职场文书
信息总监管理职责范本
2014/03/08 职场文书
医学生求职自荐书
2014/06/12 职场文书
铅球加油稿100字
2014/09/26 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
天那边观后感
2015/06/09 职场文书
在职证明书模板
2015/06/15 职场文书
2015国庆节宣传语
2015/07/14 职场文书
python全面解析接口返回数据
2022/02/12 Python