当前位置:   article > 正文

vue3.0实现前进刷新后退不刷新_vue3 前进刷新后退不刷新

vue3 前进刷新后退不刷新

前言 

vue2.0实现前进刷新,后退缓存的例子有很多,但是vue3.0版本的没有找到,刚好有一个同学咨询这个问题,所以现在有空了写一篇文章来谈谈,怎么用vue3.0的轮子去实现前进刷新后退缓存。

场景

项目里有三个页面,分别为一级首页、二级列表页和三级详情页,从首页进入列表页刷新,从列表页进入详情页刷新,但是从详情页返回列表页不刷新,所以需要缓存的是二级列表页。

理论

  1. 通过keep-alive缓存组件;
  2. 组件路由里定义一个变量isKeepAlive来控制组件的缓存;
  3. 通过路由独享守卫根据条件修改缓存变量,选择性缓存组件。

实现 

比方说三级页面分别为A、B和C,我们需要对B页面根据路由信息进行条件缓存

 1、路由的配置

B组件的路由里定义一个变量isKeepAlive,同时还有一个路由独享守卫方法beforeEnter,当进入B页面时触发beforeEnter,我们判断如果是从C页面进入B页面,修改isKeepAlive为True使B页面缓存起来。

  1. {
  2. path: '/a',
  3. name: 'A',
  4. component: ()=> import('../views/A.vue'),
  5. meta: {
  6. title: 'A Page'
  7. }
  8. },
  9. {
  10. path: '/b',
  11. name: 'B',
  12. component: ()=> import('../views/B.vue'),
  13. meta: {
  14. title: 'B Page',
  15. isKeepAlive: false,
  16. },
  17. // 路由独享守卫
  18. beforeEnter: (to, from) => {
  19. to.meta.isKeepAlive = to.name==='B' && from.name=='C' ? true : false
  20. return true
  21. },
  22. },
  23. {
  24. path: '/c',
  25. name: 'C',
  26. component: ()=> import('../views/C.vue'),
  27. meta: {
  28. title: 'C Page'
  29. }
  30. }

(注:路由的初始化略)

2、配置keep-alive

  1. // App.vue
  2. <router-view v-slot="{Component, route}">
  3. <keep-alive>
  4. <component :is="Component" v-if="route.meta.isKeepAlive"/>
  5. </keep-alive>
  6. <component :is="Component" v-if="!route.meta.isKeepAlive" />
  7. </router-view>

 3、B页面根据isKeepAlive来请求数据

  1. import { onMounted } from 'vue';
  2. import { useRoute } from 'vue-router'
  3. const route = useRoute()
  4. onMounted(()=> {
  5. if(route.meta.isKeepAlive) return
  6. console.log('init data') // 获取列表数据
  7. })

(完)

参考文献:

导航守卫 | Vue Router

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/901119
推荐阅读
相关标签
  

闽ICP备14008679号