在Vue中如何缓存页面

在Vue中经常会遇到需要缓存页面的情况,如果不对Vue进行处理,那么Vue默认是不会缓存页面的。例如从菜谱列表界面进入到菜谱的详情页后,再从菜谱详情页中返回到菜谱列表页面中时,菜谱列表是不需要进行刷新的,一个是增加了不必要的网路请求,第二个是如推荐菜谱后台是实时推荐的,每次请求的数据都不一定一样的,这样在用户退出后甚至找不到之前的进入位置,造成了很不好的用户体验。类似的情况还有很多,那么如何在Vue中控制页面是否刷新呢?

公共处理
首先需要在App.vue进行处理,通过meta中keepAlive字段进行区分;当需要缓存页面时,用便签进行包裹,并将v-if绑定路由中meta.keepAlive属性,同时别忘了设置不需要缓存的,通过v-if绑定meta.keepAlive的取反值。

<div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
  </div>

设置方法

  1. 方法一 直接在路由文件中进行设置:
    在路由列表中,找到需要缓存的页面,设置meta对象,将keepAlive设置为true,如下
const routes = [
  {
    path: "/",
    name: "Home",
    component: Home,
    meta: { keepAlive: true }
  },
  {
    path: "/cookbookInfo",
    name: "cookbookInfo",
    component: cookbookInfo
  }
];
  1. 方法二 在路由守卫中,拦截对应的页面,通过代码设置其对应meta中keepAlive属性
router.beforeEach((to, from, next) => {
  console.log("即将跳转,原路由 ------------------------ >  " + from.name);
  if (from.name === "Home") {
    from.meta.keepAlive = true;
  } else {
    from.meta.keepAlive = false;
  }
  next();
});

注意:以上两种方法都可以对路由是否缓存进行设置,如果不论何种情况下都要缓存页面,可以直接采用第一种方法,当然第二种情况同样可以满足情况;但是如果需要区分从不同页面跳转的情况来确定是否需要缓存的话,就需要用到第二种方法。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰sir2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值