vue keep-alive總結,使用keep-alive快取頁面,返回時重新整理部分資料示例。
官方說明
<keep-alive>
包裹動態元件時,會快取不活動的元件例項,而不是銷燬它們。和<transition>
相似,<keep-alive>
是一個抽象元件:它自身不會渲染一個 DOM 元素,也不會出現在元件的父元件鏈中。
當元件在<keep-alive>
內被切換,它的activated
和deactivated
這兩個生命週期鉤子函式將會被對應執行。
用途
主要用於保留元件狀態或避免重新渲染。
生命週期函式
activated
在 keep-alive 元件啟用時呼叫
該鉤子函式在伺服器端渲染期間不被呼叫
disactivated
在 keep-alive 元件停用時呼叫
該鉤子在伺服器端渲染期間不被呼叫
生命週期執行順序:
1、不使用keep-alive的:beforeRouteEnter --> created --> mounted --> destroyed
2、使用keep-alive的:beforeRouteEnter --> created --> mounted --> activated --> deactivated
3、使用keep-alive,再次進入了快取頁面:beforeRouteEnter -->activated --> deactivated
使用總結
基本用法
<!-- 基本 --> <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>
根據條件快取
<!-- 逗號分隔字串 --> <keep-alive include="a,b"> <component :is="view"></component> </keep-alive> <!-- 正則表示式 (使用 `v-bind`) --> <keep-alive :include="/a|b/"> <component :is="view"></component> </keep-alive> <!-- 陣列 (使用 `v-bind`) --> <keep-alive :include="['a', 'b']"> <component :is="view"></component> </keep-alive>
個人最常使用:結合router快取部分頁面
1.app.vue
<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>
2.router目錄index.js
export default new Router({ routes: [ { path:'*', component: (resolve) => require(['../components/main/login.vue'], resolve) },{ path:'/inspectList', name:'inspectList', component:inspectList, meta:{ keepAlive:true,//判斷是否需要快取 } },
{
path: '/monitorMenu', name: 'monitorMenu', component: monitorMenu , meta: { keepAlive: true, // 判斷是否需要快取 } }, ] })
使用keep-alive快取頁面,返回時重新整理部分資料示例
通過上面已經知道了被keep-alive包裹的頁面會被快取。同時知道生命週期執行順序:
使用keep-alive的:beforeRouteEnter --> created --> mounted --> activated --> deactivated
使用keep-alive,再次進入了快取頁面:beforeRouteEnter -->activated --> deactivated。
所以只需要使用keep-alive結合router快取需要快取的頁面,然後把需要重新整理的資料放在頁面的activated 鉤子函式中。
activated(){ //需要重新整理的頁面方法 this.getSubsideList(); },