keep-alive实现不同页面跳转列表页的缓存状态

本文介绍了一个Vue项目中如何实现首页不缓存,列表页缓存,从详情页返回列表页保留缓存的配置。通过设置`router-index.js`中各路由的`meta`属性,结合`app.vue`中的`<keep-alive>`标签动态控制组件缓存,以及在`list.vue`中使用`beforeRouteEnter`和`activated`钩子进行数据刷新。
摘要由CSDN通过智能技术生成

实现效果:home首页跳转list页面不缓存,detail页面返回list页面保留缓存。

路由页面定义keep-alive和isback router - index.js

{
    path: '/home',
    name: 'home',
    component: () =>
    import ('../views/home.vue'),
},
{
    path: '/list',
    name: 'list',
    component: () =>
    import ('../views/list.vue'),
    meta: {
        keepAlive: true, 
        isBack: false
     },
},
{
    path: '/detail',
    name: 'detail',
    component: () =>
    import ('../views/detail.vue'),
},

app.vue页面

<template>

  <div id="app">

    <!-- <router-view/> -->

    <!-- 可以被缓存的视图组件 -->

    <keep-alive>

      <router-view v-if="$route.meta.keepAlive"></router-view>

    </keep-alive>

    <!-- 不可以被缓存的视图组件 -->

    <router-view v-if="!$route.meta.keepAlive"></router-view>

  </div>

</template>

list.vue页面

主要用到 beforeRouteEnter 和 activated

created() {

        this.isFirst = true

        this.getData();

}

beforeRouteEnter(to, from, next) {

        if (from.name == "detail") {

                to.meta.isBack = true;

        } else {

                to.meta.isBack = false;

        }

        next();

},

activated(){

        let that = this;

        if (!this.$route.meta.isBack && that.isFirst==false) {

                //参数清空 重新请求数据

                that.title = ""

                that.page = 1

                that.getData();

        }

},

deactivated(){

        this.isFirst = false

},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值