vue中keep-alive,include的缓存问题

博客围绕A、B、C、D四个页面的刷新与缓存需求展开。需求为A->B->C->D顺序刷新页面,D->C->B走缓存,且每次从A到B刷新B页面等。主要利用Vue官方文档2.1以上的属性,结合include和vuex实现,还给出了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:有A,B,C,D四个页面,A是按钮页(点击按钮进入B页面),B是订单列表页,C是订单详情页,D是费用详情页

需求:顺序是A->B->C->D,每次都刷新页面,D->C->B时走缓存,但是每次从A到B都要刷新B页面,从B到C需要刷新C页面,从C到D要刷新D页面

在vue官方文档2.1以上有include 和 exclude 属性允许组件有条件地缓存。在这里主要用include结合vuex来实现(四个页面组件都有自己的name才会生效,这里name就叫A,B,C,D)

从D->C,从C->B,从B->A 可以写一个公共的头部返回组件,统一使用 this.$router.go(-1)返回前一页

App.vue


<template> <div class="app"> <keep-alive :include="keepAlive" > <router-view/> </keep-alive> </div> </template> <script type='text/javascript'> export default { data () { return {} }, computed: { keepAlive () { return this.$store.getters.keepAlive } } } </script>

store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    keepAlive: []
  },
  mutations: {
    SET_KEEP_ALIVE: (state, keepAlive) => {
      state.keepAlive = keepAlive
    }
  },
  getters: {
    keepAlive: state => state.keepAlive
  }
})

每次进入B页面时先初始化 keepAlive(设置要走缓存的页面)

A.vue

<script>
    export default {
        name: 'A',
        methods: {
            buttonClick () {
                this.$store.commit('SET_KEEP_ALIVE', ['B', 'C', 'D']) 
          this.$router.push('/B')
       }
     }
  }
</script>

B.vue 该页面用来设置缓存和清除缓存

<script>
    export default {
        name: 'B',
        beforeRouteEnter (to, from, next) {
            next(vm => {
               if (from.path.indexOf('C') > -1) {
                    vm.$store.commit('SET_KEEP_ALIVE', ['B'])
               }
            })
        },
        beforeRouteLeave (to, from, next) {
            if (to.path.indexOf('C') > -1) {
               this.$store.commit('SET_KEEP_ALIVE', ['B', 'C'])
            } else if (to.path.indexOf('A') > -1) {
         this.$store.commit('SET_KEEP_ALIVE', []) 
} next() }  }
</script>

到这里就实现了需求

 

 

转载于:https://www.cnblogs.com/rongjuan/p/9555843.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值