vc-keep-alive給keep-alive一個小升級

Github
Live Demo

主要修改了 keepAlive 的緩存機制, 可以像 APP 那樣前進刷新, 返回銷毀, 支持動態(tài)路由和功能性路由

keepalive.gif

改變了keepAlive的緩存機制, 可以像 APP 那樣前進重建, 返回銷毀
不過目前僅僅用于Page級別, 也就是一級路由, 其他級路由似乎沒有需要
原本的keepAlive默認(rèn)是以componentName來做緩存的 key
當(dāng)然如果有vnode.key的話則會使用vnode.key, 所以網(wǎng)上很多通過$route.fullPath當(dāng)作 key
可以實現(xiàn)params/query的變更新建組件, 但是無法做到返回銷毀
如果使用$destroy()去手動銷毀, 但是keepAlive里面還是存在緩存標(biāo)記
導(dǎo)致從 3 級路由返回到 2 級路由時拿緩存的instance是失效的, 進而導(dǎo)致重建
所以通過Page前進返回行為分析, 總結(jié)出 key 的生成規(guī)則

解決的痛點

  1. 子路由的更新和父級路由無關(guān), 所以一級路由的緩存 key 是命中路由的父一級路由相關(guān), 目前是父路由的 path + 父子路由相同的 params
  2. 還有就是自己功能性路由的支持
    1. 比如使用支持返回鍵的 imgsViewer, 需要 history 壓棧而不觸發(fā) forward/backward 事件, 所以提供了 ignorePaths 參數(shù)
    1. 比如子路由不使用 router-view 來渲染, 而是使用 view-pager 來自行控制,
      支持左右滑動切換, 如果 view-pager 的頁面狀態(tài)是需要保存到 url, 則需要一級路由的一個動態(tài)路由占位符, 充當(dāng)子路由, 所以提供了 ignoreParams 參數(shù)

Props

參數(shù) 類型 默認(rèn)值 可選值 描述
ignorePaths Array, String, RegExp 忽略符合條件的 URL,不壓棧
ignoreParams Array, String 忽略動態(tài)路由參數(shù)羡榴,不參與 key 的構(gòu)成

Events

事件名 參數(shù) 描述
init Info 組件初始化的時候
forward Info 路由前進的時候
replace Info 路由替換的時候
backward Info 路由返回的時候

Event Params: Info

參數(shù) 類型 描述
fromPath String 變化前 path
nextPath String 變化后 path
fromRouterKey String 變化前 key
nextRouterKey String 變化后 key

注: vc-keep-alive 將會把歷史棧儲存在 SessionStorage 的__VCKEEPALIVE__字段里

Demo Code

npm install vc-keep-alive
<template>
  <div id="app" :class="pageAct">
    <transition name="page-slide">
      <vc-keep-alive
        :ignorePaths="ignorePaths"
        :ignoreParams="ignoreParams"
        @init="log('init', $event)"
        @forward="log('forward', $event)"
        @replace="log('replace', $event)"
        @backward="log('backward', $event)"
      >
        <router-view />
      </vc-keep-alive>
    </transition>
  </div>
</template>

<script>
import Vue from 'vue';
import VcKeepAlive from 'vc-keep-alive';

Vue.use(VcKeepAlive);

export default {
  data() {
    return {
      pageAct: '',
      ignorePaths: ['popup='],
      ignoreParams: ['pagerTab']
    };
  },

  methods: {
    log(act, args) {
      console.log(act, args);
      this.pageAct = 'page-' + act;
    }
  }
};
</script>

TODO

License

MIT 一起來扣細(xì)節(jié)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掘而,一起剝皮案震驚了整個濱河市遣蚀,隨后出現(xiàn)的幾起案子卸伞,更是在濱河造成了極大的恐慌体箕,老刑警劉巖柏副,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宛琅,死亡現(xiàn)場離奇詭異,居然都是意外死亡蒋腮,警方通過查閱死者的電腦和手機淘捡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來池摧,“玉大人焦除,你說我怎么就攤上這事∽魍” “怎么了膘魄?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竭讳。 經(jīng)常有香客問我创葡,道長,這世上最難降的妖魔是什么绢慢? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任灿渴,我火速辦了婚禮,結(jié)果婚禮上呐芥,老公的妹妹穿的比我還像新娘逻杖。我一直安慰自己,他們只是感情好思瘟,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闻伶,像睡著了一般滨攻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓝翰,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天光绕,我揣著相機與錄音,去河邊找鬼畜份。 笑死诞帐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爆雹。 我是一名探鬼主播停蕉,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼愕鼓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慧起?” 一聲冷哼從身側(cè)響起菇晃,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚓挤,沒想到半個月后磺送,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡灿意,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年估灿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缤剧。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甲捏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞭执,到底是詐尸還是另有隱情司顿,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布兄纺,位于F島的核電站大溜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏估脆。R本人自食惡果不足惜钦奋,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疙赠。 院中可真熱鬧付材,春花似錦、人聲如沸圃阳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捍岳。三九已至富寿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锣夹,已是汗流浹背页徐。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留银萍,地道東北人变勇。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像贴唇,于是被迫代替她去往敵國和親搀绣。 傳聞我的和親對象是個殘疾皇子飞袋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,097評論 1 32
  • 1 寫這篇博客的初衷 首先一句話概括:我想把這幾個月做的事情記錄下來,并且希望盡量詳細(xì)豌熄,希望讀者讀了這篇文章能夠知...
    格老子閱讀 2,650評論 1 56
  • 一授嘀、具體需求: 1. 頁面布局 左側(cè)導(dǎo)航,右側(cè)側(cè)邊輔助菜單锣险,中間主業(yè)務(wù)界面蹄皱;左側(cè)導(dǎo)航是根據(jù)用戶權(quán)限動態(tài)生成的。 2...
    環(huán)零弦閱讀 8,793評論 0 3
  • 投射兒子好好利用這一個星期時間把老師講的知識點認(rèn)真復(fù)習(xí)并牢牢記住芯肤,期末考試好成績巷折。 投射兒子認(rèn)真完成作業(yè),多刷題練...
    馮梅fm閱讀 123評論 0 1
  • 4點56分,我扔掉手機击蹲,打開簡書署拟,開始寫作。 就在昨晚歌豺,聽完樊登講書的最后一分鐘推穷,他的一句話最終又扎到我的內(nèi)心,激...
    梅子Mey閱讀 5,730評論 8 31