keep-alive頁面緩存問題

業(yè)務場景:
? ? 現(xiàn)有A,B頁面和其他所有頁面(以下用C表示)。B頁面為緩存頁面,meta.keepAlive為true,

當A頁面進入B頁面后,B頁面需要渲染為不緩存的狀態(tài)(效果等同第一次進入B頁面),離開B頁面后緩存B頁面,也就是說B->A或者B->C都將B頁面緩存。只有在特定情況下(A進入B)清除B頁面的緩存。

<keep-alive>

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

</keep-alive>

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

以上這種方式,設置了keepAlive為true后,B頁面是一直會進行緩存

查閱vue相關文檔后搭配了vuex將需要緩存的頁面進行管理,以下是添加后的代碼:

<keep-alive :include="cachePages">

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

</keep-alive>

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

然后在路由導航守衛(wèi)中對meta進行處理

const curCachePages = store.getters.cachePages;
router.beforeEach((to, from, next) => {
?????if (to.path === 'B' && from.path === 'A') {
?????????if (curCachePages.indexOf('B') > -1) {
?????????????store.dispatch('remove', 'B');
?????????}
? ? ? }
? ? ? next()
?})

這樣子的話就當A進入B后,B頁面就不會緩存。但是這樣也導致了B頁面不管怎么樣,都不會進行緩存了。接下來的問題就是在什么時候?qū)頁面再加回到keepalive的行列中了。
查看vue-router容易知道,在B頁面可以使用beforeRouteEnter組件內(nèi)守衛(wèi)來處理,將B加回到cachePages中。

beforeRouteEnter (to, from, next) {
?????next(vm => { // 通過 `vm` 訪問組件實例
?????????if (vm.$store.getters.cachePages.indexOf('about') === -1) {
?????????????vm.$store.dispatch('add', 'about');
? ? ? ? ? }
?????})
?}

這樣,不管任何頁面進入到B頁面,當B頁面不在緩存頁面列中時都會將B頁面加入緩存。


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容