vue2前进刷新后退不刷新

网上关于前进刷新后退不刷新的代码很多,但是在项目里面都用不起来,感觉没办法真正实现该功能。我这边简单粗暴的监听window的popstate事件搞定。

首先在store里面定义好缓存相关的对象和操作

import Vue from 'vue';
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
    state:{
        keepAlivePages:[],
    },
    mutations:{           
        //增加缓存
        pushKeepAlivePages(state,pageName){
            
            if(state.keepAlivePages.includes(pageName)){
                console.log('此页面已在缓存中')
            }
            else {
                state.keepAlivePages.push(pageName)
            }
          
        },
        //移除最近一个缓存
        popKeepAlivePages(state){
          
            if(state.keepAlivePages.length>0){
                state.keepAlivePages.pop();
            }

        },
        //移除缓存
        removeKeepAlivePages(state,pageName){
           
            let index = state.keepAlivePages.findIndex((item) => {
                return item === pageName
            })
            if(index !== -1) {
                state.keepAlivePages.splice(index, 1)
            } else {
                console.log('该页面未被缓存')
            }
            
        },
    }
});

然后app.vue中将需要缓存的组件用keepAlive包裹,include的列表指向store里面的缓存对象

<template>
    <div id="app">
        
        <keep-alive :include="keepAlivePages">
            <router-view/>
        </keep-alive>
    </div>
</template>
<script>
import Vue from 'vue';

export default {
    data(){
        return{
            
        }
    },
    computed:{
        keepAlivePages:{
            get (){
                return this.$store.state.keepAlivePages;
            },
        },
    },
};
</script>

接下来在main.js中做好前进加入缓存列表后退删除缓存列表的操作即可

import Vue from 'vue'
import App from './App.vue'
import router from './router';
import store from "./store";

//路由守卫
router.beforeEach((to, from, next) => {
    //前进缓存   
    if (to.path !== from.path) {            
        store.commit('pushKeepAlivePages', to.name);
    }
    next();
})

window.addEventListener("popstate", (e)=> {
    //后退删除缓存
    store.commit('removeKeepAlivePages',router.currentRoute.name)
}, false);


//构建vue
new Vue({
    router: router,
    store: store,
    render: h => h(App),
}).$mount('#app');

目前应付手机h5应用中没有太多复杂跳转的简单页面是够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值