vue keep-alive的页面缓存问题

我在写代码的时候,遇到这样一种情况就是:A页面->B页面->C页面。A页面->B页面时,B页面获取最新数据(不缓存);B页面->C页面,B页面缓存。发现问题第一时间想到的就是百度大法,但是百度来百度去,都找不到一个好办法,直到遇到这篇文章完美解决vue keep-alive页面缓存问题给了我启发。再次发动另一个技能CV大法,最后发现里面的代码还是不太符合我的需求,然后就稍微修改了一下,顺便做个记录。下面直接贴代码了。。。

页面A

<template>
  <div>
    我是页面A
  </div>
</template>

<script>
export default {
    
    
  name: "PageA",//这里要写
  data() {
    
    
    return {
    
    
    };
  },
};
</script>

<style scoped>
</style>

页面B(相信大家看完代码之后,发现主要是在页面B做判断)

<template>
  <div id="daily-schedule">
    页面B
    <input type="text"/>
  </div>
</template>

<script>
export default {
    
    
  name: "PageB",//这里要写
  data() {
    
    
    return {
    
    
    };
  },
  beforeRouteEnter (to, from, next) {
    
    
    if (from.path === "/PageA") {
    
    
      next((vm) => {
    
    
        vm.$store.commit("delcachePageName", to.name);
      });
    } else {
    
    
      next();
    }
  },
  beforeRouteLeave(to, from, next) {
    
    
    if (to.path === "/PageA") {
    
    
      this.$store.commit('addcachePageName', from.name)
    } 
    next();
  },
};
</script>

<style scoped>
</style>

页面C

<template>
  <div>
  页面C
  </div>
</template>

<script>
export default {
    
    
  name: "PageC",
  data() {
    
    
    return {
    
    
    };
  },
};
</script>

<style scoped>
</style>

store.js,需要安装vuex

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

Vue.use(Vuex);

const store = new Vuex.Store({
    
    
   //state 存放数据
    state: {
    
    
        cachePageName:'', //不缓存组件名称
    },
    // mutations 改变数据定义方法
    mutations: {
    
    
        //重置缓存组件名称
	    resetcachePageName(state, res){
    
    
	        state.cachePageName = res;
	    },
        //添加缓存组件名称
		addcachePageName(state, res){
    
    
		    if(state.cachePageName == ''){
    
    
		        state.cachePageName = res;
		    }else{
    
    
		        let arr = state.cachePageName.split(',');
		        if (res && typeof res === 'string') {
    
    
		            let i = arr.indexOf(res);
		            if (i <= -1) {
    
    
		                state.cachePageName = state.cachePageName+','+res;
		            }
		        }
		    }
		},
        //删除缓存组件名称
		delcachePageName(state, res){
    
    
		    let arr = state.cachePageName.split(',');
		    if (res && typeof res === 'string') {
    
    
		      let i = arr.indexOf(res);
		      if (i > -1) {
    
    
		          arr.splice(i, 1);
		          state.cachePageName = arr.join();
		      }
		    }
		}
    },
    getters: {
    
    
        getCachePageName(state){
    
    
            return state.cachePageName;
        }
    }

})

export default store

App.vue

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

<script>
	export default {
    
    
		name: 'App',
		data() {
    
    
			return {
    
    
			};
		},
		computed: {
    
    
			cachePageName(){
    
    
		        return this.$store.getters.getCachePageName;
		    }
		},
	}
</script>

<style>
</style>

猜你喜欢

转载自blog.csdn.net/xlk_1996/article/details/118723949