当前位置: 首页 > news >正文

vue3 + vue-router + keep-alive缓存页面

1.vue-router中增加mate.keepAlive和deepth属性

{path: '/',name: 'home',component: HomeView,meta: {//	当前页面要不要缓存keepAlive: false,//	当前页面层级deepth: 1,}},{path: '/list',name: 'list',component: ListView,meta: {//	当前页面要不要缓存keepAlive: true,//	当前页面层级deepth: 2,}},{path: '/info',name: 'info',component: InfoView,meta: {//	当前页面要不要缓存keepAlive: false,//	当前页面层级deepth: 3,}},

2.App.vue页面template中增加keep-alive

<template><router-view v-slot="{ Component, route }"><keep-alive :include="include"><component :is="Component" v-if="route.meta.keepAlive" /></keep-alive><component :is="Component" v-if="!route.meta.keepAlive" /></router-view>
</template>

3.App.vue页面js中增加逻辑

export default {setup() {const router = useRouter();//	用于记录实际缓存页面名称const data = reactive({include: []});router.afterEach((to, from) => {//	把要缓存的页面加入缓存列表//	如果 要 to(进入) 的页面是需要 keepAlive 缓存的,把 name push 进 include数组if (to.meta.keepAlive) {!data.include.includes(to.name) && data.include.push(to.name);}//	解决从首页进入列表页面的时候,读取的是缓存页面,如://	第一次从首页进入列表页面,读取新数据,缓存起来,然后,返回首页//	第二次再进入列表页面,读取的是第一次进入的缓存,不更新。// 如果 要 form(离开) 的页面是 keepAlive缓存的,// 再根据 deepth 来判断是前进还是后退// 如果是后退,就把当前页面从缓存列中删除,if (from.meta.keepAlive && to.meta.deepth < from.meta.deepth) {var index = data.include.indexOf(from.name);index !== -1 && data.include.splice(index, 1);}})return { ...toRefs(data) }}
}

4.在缓存实际页面增加name属性和路由中name设置的相同

// List.vue
export default {name: 'list',		//	对应路由中name:'list'的值components: {},setup(){}
}

5.遇到的问题

1.一开始直接用meta.keepAlive的值判断是否需要缓存,导致从列表进入详情,再从详情返回列表的时候是对的,再从列表返回首页,再从首页进入列表就读取缓存不更新了。
2.使用keep-alive的include属性解决1中的问题。但是明明细逻辑里已经把要缓存的name加入到缓存列表中了,就是不生效。
3.在要缓存的组件中,加入name属性解决2中的问题。

http://www.lryc.cn/news/241442.html

相关文章:

  • unigui同页面内重定向跳转,企业微信内部应用开发获取用户code例子
  • 垃圾数据啊
  • GB/T 29498-2013 木门窗检测
  • rocketMQ5.0顺序消息golang接入
  • HuggingFace-利用BERT预训练模型实现中文情感分类(下游任务)
  • PSP - 从头搭建 抗原类别 (GPCR) 的 蛋白质结构预测 项目流程
  • 城市NOA加速落地,景联文科技高质量数据标注助力感知系统升级
  • 控制反转(IoC)是什么?
  • Redisson分布式锁源码解析、集群环境存在的问题
  • 2016年10月4日 Go生态洞察:HTTP追踪介绍
  • 分布式篇---第四篇
  • 从零开始的C++(十九)
  • opencv-使用 Haar 分类器进行面部检测
  • C++纯虚函数和抽象类 制作饮品案例(涉及知识点:继承,多态,实例化继承抽象类的子类,多文件实现项目)
  • 什么是网关和链路追踪,以及怎么使用?
  • git 文件被莫名其妙的或略且无论如何都查不到哪个.gitignore文件忽略的
  • nova组件简介
  • 【Vue】响应式与数据劫持
  • Modbus RTU转Profinet网关连接PLC与变频器通讯在机床上应用案例
  • Autoware 整体架构
  • 【maven】手动指定jar推送
  • 算法---定长子串中元音的最大数目
  • 美国汽车零部件巨头 AutoZone 遭遇网络攻击
  • WPF面试题入门篇
  • opencv-ORB检测
  • please upgrade numpy version to >=1.20
  • 关于进制的转化
  • JVM 之 字节码指令
  • 阿里云跨账号建立局域网
  • 【OpenSTL】方便好用的时空预测开源库