赞
踩
vue2.0实现前进刷新,后退缓存的例子有很多,但是vue3.0版本的没有找到,刚好有一个同学咨询这个问题,所以现在有空了写一篇文章来谈谈,怎么用vue3.0的轮子去实现前进刷新后退缓存。
项目里有三个页面,分别为一级首页、二级列表页和三级详情页,从首页进入列表页刷新,从列表页进入详情页刷新,但是从详情页返回列表页不刷新,所以需要缓存的是二级列表页。
比方说三级页面分别为A、B和C,我们需要对B页面根据路由信息进行条件缓存
B组件的路由里定义一个变量isKeepAlive,同时还有一个路由独享守卫方法beforeEnter,当进入B页面时触发beforeEnter,我们判断如果是从C页面进入B页面,修改isKeepAlive为True使B页面缓存起来。
- {
- path: '/a',
- name: 'A',
- component: ()=> import('../views/A.vue'),
- meta: {
- title: 'A Page'
- }
- },
- {
- path: '/b',
- name: 'B',
- component: ()=> import('../views/B.vue'),
- meta: {
- title: 'B Page',
- isKeepAlive: false,
- },
- // 路由独享守卫
- beforeEnter: (to, from) => {
- to.meta.isKeepAlive = to.name==='B' && from.name=='C' ? true : false
- return true
- },
- },
- {
- path: '/c',
- name: 'C',
- component: ()=> import('../views/C.vue'),
- meta: {
- title: 'C Page'
- }
- }
(注:路由的初始化略)
- // App.vue
- <router-view v-slot="{Component, route}">
- <keep-alive>
- <component :is="Component" v-if="route.meta.isKeepAlive"/>
- </keep-alive>
- <component :is="Component" v-if="!route.meta.isKeepAlive" />
- </router-view>
- import { onMounted } from 'vue';
- import { useRoute } from 'vue-router'
-
- const route = useRoute()
-
- onMounted(()=> {
- if(route.meta.isKeepAlive) return
- console.log('init data') // 获取列表数据
- })
(完)
参考文献:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。