vue 部分页面缓存,部分页面不缓存的问题

Posted suiyide

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue 部分页面缓存,部分页面不缓存的问题相关的知识,希望对你有一定的参考价值。

前端时间项目迭代,其中有个需求

在vue里面,有a.b.c三个页面,要达到的效果是从a页面进去b页面,b页面需要刷新,但若从b页面进入c页面了以后再回到b页面,b页面需要保留之前的值,不做刷新;

第一想到的是:<router-view v-if="$route.meta.keepAlive"></router-view> ;但是由于v-if 每次会销毁页面元素,导致第一次是缓存不成功的;在网上也找到过window.reload();这种方法,但是页面会有一瞬间的空白,用户体验不是很好;

后同事找了一种方法,vuex结合路由守卫可以达到此效果,具体代码如下:

首先app.vue

//js

computed: {
			keepAlive () {
				return this.$store.getters.keepAlive
			}
		},

//html
<keep-alive  :include=‘keepAlive‘>
	<router-view></router-view>
</keep-alive>

vuex 中需要定义keepAlive

import Vue from ‘vue‘
import Vuex from ‘vuex‘


Vue.use(Vuex)

var store = new Vuex.Store({
    // 定义状态
    state: {
    	
        keekAlives:[],
        
    },
    mutations:{  //更改 Vuex 的 store 中的状态
        SET_KEEP_ALIVE:function(state, keekAlives){
           return state.keekAlives = keekAlives;
        }
    },
    getters: {
      keepAlive: function(state){
          return state.keekAlives
    //   keepAlive: state => state.keekAlives
      }
    }
})

export default store

最后在需要缓存的页面进行判断

beforeRouteEnter (to, from, next) {
     next(vm => {
               if (from.name=="serve") {
                    vm.$store.commit(‘SET_KEEP_ALIVE‘, [‘addProject‘])
               }
            })
        },
        beforeRouteLeave (to, from, next) {
            if (to.name == "companySearch") {
               this.$store.commit(‘SET_KEEP_ALIVE‘, [‘addProject‘])
            } else if (to.name=="serve" || to.name=="addSuccess") {
         this.$store.commit(‘SET_KEEP_ALIVE‘, []) 
            }
            next()
        },

  

以上是关于vue 部分页面缓存,部分页面不缓存的问题的主要内容,如果未能解决你的问题,请参考以下文章

vue使用keep-alive缓存页面,返回页面时刷新部分数据

如何使用yii2的缓存依赖特性

文件缓存(模板缓存)

优化vue项目缓存引发的白屏

记录在ios系统上,自研app,灰度环境遇到的一个vue页面dom节点已渲染,但是显示部分空白的情况

Nginx——nginx作为缓存服务(部分页面不缓存示例)