最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue移動(dòng)端項(xiàng)目緩存問題實(shí)踐記錄

 更新時(shí)間:2018年10月29日 17:14:12   作者:rocky191  
最近在做一個(gè)vue移動(dòng)端項(xiàng)目,被緩存問題搞得頭都大了,積累了一些經(jīng)驗(yàn),特此記錄總結(jié)下,分享到腳本之家平臺(tái),對(duì)vue移動(dòng)端項(xiàng)目緩存問題實(shí)踐記錄感興趣的朋友跟隨小編一起看看吧

最近在做一個(gè)vue移動(dòng)端項(xiàng)目,被緩存問題搞得頭都大了,積累了一些經(jīng)驗(yàn),特此記錄總結(jié)下,權(quán)當(dāng)是最近項(xiàng)目問題的一個(gè)回顧吧!

先描述下問題場(chǎng)景: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)識(shí)比如ID展示不一樣的內(nèi)容,在C頁面操作后,返回B頁面,B頁面數(shù)據(jù)發(fā)生變化。這個(gè)時(shí)候會(huì)有兩種情況:

  • C頁面操作數(shù)據(jù)后返回B頁面,B頁面對(duì)應(yīng)數(shù)據(jù)應(yīng)該發(fā)生變化。
  • C頁面直接點(diǎn)擊左上角箭頭返回,B頁面對(duì)應(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)該存在了,這里就涉及到如何處理緩存,何時(shí)使用緩存,何時(shí)清除緩存的問題了。

目前項(xià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,可以讓我們決定哪些組件使用緩存,哪些不使用緩存,但是并沒有解決我們想動(dòng)態(tài)使用緩存的目的,目前我的項(xiàng)目使用了如下兩種方式處理緩存:

方式一 ,使用是否使用緩存標(biāo)識(shí)

在路由文件router.js里給每個(gè)路由添加meta信息,標(biāo)識(shí)是否使用緩存。

meta: {
  isUseCache: false,//不使用緩存
  keepAlive: true
}

使用方式:

A->B,B不能緩存;B->A,A緩存。

(1)A頁面:

beforeRouteLeave(to, from, next) {
 // 設(shè)置下一個(gè)路由的 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è)置下一個(gè)路由的 meta
 if(to.path=='/A'){
  to.meta.isUseCache = true;
 }
 next();
},
activated(){
  if(!this.$route.meta.isUseCache){
    this.getData();
  }
} 

方式二,強(qiáng)制清除緩存。

這種方式是從網(wǎng)上找的一種方式,使用了vue內(nèi)部組件之后,不在支持動(dòng)態(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即可。

總結(jié)

以上所述是小編給大家介紹的vue移動(dòng)端項(xiàng)目緩存問題實(shí)踐記錄,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

章丘市| 乌苏市| 湖州市| 平塘县| 屯门区| 庄河市| 苗栗市| 新宁县| 邓州市| 新郑市| 汉川市| 班戈县| 同心县| 杂多县| 阿拉善右旗| 济宁市| 维西| 莱州市| 平果县| 大安市| 麻江县| 昌乐县| 房山区| 英山县| 南部县| 达孜县| 西乌| 牟定县| 武胜县| 梅州市| 北票市| 搜索| 温州市| 大埔区| 长葛市| 临汾市| 遂平县| 饶平县| 博白县| 滦平县| 辽阳县|