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 相关文章推荐
javascript的原生方法获取数组中的最大(最小)值
Dec 19 Javascript
js 获取元素下面所有li的两种方法
Apr 14 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
学习javascript面向对象 掌握创建对象的9种方式
Jan 04 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
extract-text-webpack-plugin用法详解
Feb 14 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
vue-property-decorator用法详解
Dec 12 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实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
IE8下关于querySelectorAll()的问题
2010/05/13 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
python 基础教程之Map使用方法
2017/01/17 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
python 实现识别图片上的数字
2019/07/30 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
python 操作excel表格的方法
2020/12/05 Python
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
人事部专员岗位职责
2014/03/04 职场文书
家教广告词
2014/03/19 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
汽车转让协议书
2015/01/29 职场文书
学校施工安全责任书
2015/01/29 职场文书