您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)vue移動端項目緩存問題的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
先描述下問題場景:A頁面->B頁面->C頁面。假設(shè)A頁面是列表頁面,B頁面是列表詳情頁面,C頁面是操作改變B頁面的一些東西,進(jìn)行提交類似的操作。A頁面進(jìn)入B頁面,應(yīng)該根據(jù)不同的列表item顯示不一樣的詳情,從B進(jìn)入C,也應(yīng)該根據(jù)item的標(biāo)識比如ID展示不一樣的內(nèi)容,在C頁面操作后,返回B頁面,B頁面數(shù)據(jù)發(fā)生變化。這個時候會有兩種情況:
C頁面操作數(shù)據(jù)后返回B頁面,B頁面對應(yīng)數(shù)據(jù)應(yīng)該發(fā)生變化。
C頁面直接點擊左上角箭頭返回,B頁面對應(yīng)數(shù)據(jù)不應(yīng)該發(fā)生變化。繼續(xù)返回A列表頁面,換一條數(shù)據(jù),繼續(xù)進(jìn)入B頁面,B頁面展示不同內(nèi)容,進(jìn)入C頁面,C頁面刷新展示不同內(nèi)容
另一種情況發(fā)生在寫郵件的頁面中,添加收件人,選人之后,繼續(xù)添加,之前添加的聯(lián)系人應(yīng)該存在。但是從寫郵件頁面返回郵件列表再次進(jìn)入寫郵件頁面,之前添加過的聯(lián)系人數(shù)據(jù)就不應(yīng)該存在了,這里就涉及到如何處理緩存,何時使用緩存,何時清除緩存的問題了。
目前項目整體結(jié)構(gòu)如下:
<template> <div id="app"> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template>
雖然官方提供了include,exclude,可以讓我們決定哪些組件使用緩存,哪些不使用緩存,但是并沒有解決我們想動態(tài)使用緩存的目的,目前我的項目使用了如下兩種方式處理緩存:
方式一 ,使用是否使用緩存標(biāo)識
在路由文件router.js里給每個路由添加meta信息,標(biāo)識是否使用緩存。
meta: { isUseCache: false,//不使用緩存 keepAlive: true }
使用方式:
A->B,B不能緩存;B->A,A緩存。
(1)A頁面:
beforeRouteLeave(to, from, next) { // 設(shè)置下一個路由的 meta if(to.path=='/B'){ to.meta.isUseCache = false; } next(); }, activated(){ if(!this.$route.meta.isUseCache){ this.getData(); } }
(2) B頁面
beforeRouteLeave(to, from, next) { // 設(shè)置下一個路由的 meta if(to.path=='/A'){ to.meta.isUseCache = true; } next(); }, activated(){ if(!this.$route.meta.isUseCache){ this.getData(); } }
方式二,強制清除緩存。
這種方式是從網(wǎng)上找的一種方式,使用了vue內(nèi)部組件之后,不在支持動態(tài)銷毀組件,緩存一直存在,只能從源頭上下手,清掉緩存。
export const removeCatch = { beforeRouteLeave:function(to, from, next){ if (from && from.meta.rank && to.meta.rank && from.meta.rank>to.meta.rank) {//此處判斷是如果返回上一層,你可以根據(jù)自己的業(yè)務(wù)更改此處的判斷邏輯,酌情決定是否摧毀本層緩存。 if (this.$vnode && this.$vnode.data.keepAlive) { if (this.$vnode.parent && this.$vnode.parent.componentInstance && this.$vnode.parent.componentInstance.cache) { if (this.$vnode.componentOptions) { var key = this.$vnode.key == null ? this.$vnode.componentOptions.Ctor.cid + (this.$vnode.componentOptions.tag ? `::${this.$vnode.componentOptions.tag}` : '') : this.$vnode.key; var cache = this.$vnode.parent.componentInstance.cache; var keys = this.$vnode.parent.componentInstance.keys; if (cache[key]) { if (keys.length) { var index = keys.indexOf(key); if (index > -1) { keys.splice(index, 1); } } delete cache[key]; } } } } this.$destroy(); } next(); } };
在需要清掉緩存的頁面混合引入該js即可。
感謝各位的閱讀!關(guān)于“vue移動端項目緩存問題的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。