keep-alive在vue-router中的使用

在使用基于Vue的單頁面富應用的開發(fā)中,總會面向這樣的產(chǎn)品需求,既從列表頁跳轉(zhuǎn)詳情頁面篇裁,返回時需要保存列表頁的狀態(tài)。

這種場景下赡若,若是講數(shù)據(jù)寫入到全局狀態(tài)中达布,總會面臨復雜的頁面路由判斷來清楚和存儲頁面狀態(tài)。

keep-alive簡介
相較于復雜的全局狀態(tài)管理逾冬,Vue在2.x版本中將keep-alive這一組件屬性擴展成了內(nèi)置的抽象組件<keep-alive>,它自身不會渲染一個 DOM 元素黍聂,也不會出現(xiàn)在父組件鏈中。當組件在 <keep-alive> 內(nèi)被切換身腻,它的 activated 和 deactivated 這兩個生命周期鉤子函數(shù)將會被對應執(zhí)行产还。使得被keep-alive組件包裹的組件的狀態(tài)得以保留也避免了該組件的重復渲染。

keep-alive組件應用也相當?shù)暮唵梧痔耍缦拢?/p>

<keep-alive>
  <component :is="view"></component>
</keep-alive>

<!-- 多個條件判斷的子組件 -->
<keep-alive>
  <comp-a v-if="a > 1"></comp-a>
  <comp-b v-else></comp-b>
</keep-alive>

<!-- 和 `<transition>` 一起使用 -->
<transition>
  <keep-alive>
    <component :is="view"></component>
  </keep-alive>
</transition>

 與vue-router的結(jié)合
當keep-alive與vue-router結(jié)合時脐区,就完全匹配我們頁面緩存保存狀態(tài)以及數(shù)據(jù)的這一個使用場景了。

<keep-alive>
    <router-view>
        <!-- 所有路徑匹配到的視圖組件都會被緩存她按!-->
    </router-view>
</keep-alive>

將router-view作為被keep-alive包裹的組件牛隅,默認路由下的所有頁面都將被緩存,所有頁面的狀態(tài)都會被保留酌泰。

那么大家這個時候就會有個疑問媒佣,我并不想保留所有的頁面呀,我僅僅是想保留幾個業(yè)務(wù)場景陵刹,就像文頭那種由列表頁進入詳情頁默伍,再由詳情頁返回列表頁時的狀態(tài)保留。

vue在keep-alive組件提供了include 和 exclude 屬性允許組件有條件地緩存衰琐。二者都可以用逗號分隔字符串也糊、正則表達式或一個數(shù)組來表示

// 組件 app-rank
export default {
  name: 'app-rank',
  data () {
    return {}
  }
}

<keep-alive include="app-rank">
    <router-view>
        <!-- 只有路徑匹配到的視圖 app-rank 組件會被緩存!-->
    </router-view>
</keep-alive>

當場景稍微復雜碘耳,如同級目錄之間跳轉(zhuǎn)無需保存狀態(tài)显设,僅需在跳轉(zhuǎn)詳情頁面是保存狀態(tài)時,這樣就需要動態(tài)管理keep-alive的緩存辛辨。

復雜場景下的keep-alive的使用有一下兩種方案

方案一:

<keep-alive :include="includeRoute">
    <router-view>
        <!-- 只有路徑匹配到的includeRoute表達式 組件會被緩存捕捂!-->
    </router-view>
</keep-alive>

方案二:
路由中router.meta 屬性中增加是否緩存頁面組件的相應字段瑟枫,優(yōu)點是便于管理上下游頁面組件的緩存。

{
    path: '/',
    meta: {
        title: '應用排行',
        keepAlive: true
    },
    name:'appRankList',
    component: (resolve) => require(['./views/app-rank.vue'], resolve)
}

路由中meta下增加keepAlive的屬性指攒,以便于route對象中讀取慷妙。

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

這樣keep-alive中出現(xiàn)的就是需要緩存的路由頁面,當需要在離開頁面前改變?nèi)ネ撁娴木彺鏍顟B(tài)時允悦,僅需要在頁面中添加beforeRouteLeave

export default {
        data() {
            return {
                
            };
        },
        beforeRouteLeave(to, from, next) {
            // 設(shè)置下一個路由的 meta
            to.meta.keepAlive = false;
            next();
        }
    }

綜上所述膝擂,Vue中頁面的緩存無需太復雜的狀態(tài)管理就可以達到緩存頁面狀態(tài)防止重復渲染的作用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末隙弛,一起剝皮案震驚了整個濱河市架馋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌全闷,老刑警劉巖叉寂,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異总珠,居然都是意外死亡屏鳍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門局服,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钓瞭,“玉大人,你說我怎么就攤上這事淫奔∩轿校” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵搏讶,是天一觀的道長佳鳖。 經(jīng)常有香客問我霍殴,道長媒惕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任来庭,我火速辦了婚禮妒蔚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘月弛。我一直安慰自己肴盏,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布帽衙。 她就那樣靜靜地躺著菜皂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厉萝。 梳的紋絲不亂的頭發(fā)上恍飘,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天榨崩,我揣著相機與錄音,去河邊找鬼章母。 笑死母蛛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的乳怎。 我是一名探鬼主播彩郊,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚪缀!你這毒婦竟也來了秫逝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤询枚,失蹤者是張志新(化名)和其女友劉穎筷登,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哩盲,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡前方,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了廉油。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠险。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抒线,靈堂內(nèi)的尸體忽然破棺而出班巩,到底是詐尸還是另有隱情,我是刑警寧澤嘶炭,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布抱慌,位于F島的核電站,受9級特大地震影響眨猎,放射性物質(zhì)發(fā)生泄漏抑进。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一睡陪、第九天 我趴在偏房一處隱蔽的房頂上張望寺渗。 院中可真熱鬧,春花似錦兰迫、人聲如沸信殊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涡拘。三九已至,卻和暖如春据德,著一層夾襖步出監(jiān)牢的瞬間鳄乏,已是汗流浹背府蔗。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汞窗,地道東北人姓赤。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像仲吏,于是被迫代替她去往敵國和親不铆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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