Vue項目中keepAlive的使用說明(超級實用版)
keepAlive的使用
在開發(fā)的過程中如果碰到經(jīng)常瀏覽需要緩存的頁面,而且頁面很長需要記錄滾動的位置這時就需要用到keepAlive。
一共有三個步驟
1、首先在路由中的mate屬性中記錄keepAlive,如果需要緩存則置為true。
path:'/index', name:''index', component:()=>import('../../index/index'), meta:{keepAlive:true}
2、在創(chuàng)建router實例的時候加上scrollBehavior方法(keepAlive才會生效)。
let router=new Router({ ? ? mode:"hash",//1、hash哈希:有#號。2、history歷史:沒有#號 ? ? base:process.env.BASE_URL, //自動獲取根目錄路徑 ? ? scrollBehavior:(to,from,position)=>{ ? ? ? ? if(position){ ? ? ? ? ? ? return position ? ? ? ? }else{ ? ? ? ? ? ? return {x:0,y:0} ? ? ? ? } ? ? },
3、需要緩存的router-view包上keep-alive(要有兩個router-view,一個是緩存的時候顯示,一個是不緩存的時候顯示,有的時候不需要緩存)。
<keep-alive> ?? ?<router-view v-if="$router.meta.keepAlive"></router-view> </keep-alive> ?? ?<router-view v-if="!$router.meta.keepAlive"></router-view>
注意
在keep-alive中的組件會有兩個生命周期的鉤子函數(shù),activated和deactivated,其中activated是在組件第一次渲染時會被調(diào)用,而且之后每次緩存組件被激活都會被調(diào)用。所以一般使用時需要里面的代碼和created函數(shù)中的代碼一樣即可。
keepAlive的注意事項
問題描述
今天在測試提到了一個bug,當重復進入相同的組建的時候,mounted和created內(nèi)的方法不觸發(fā),導致頁面展示不一樣
原因
<keep-alive> 包裹動態(tài)組件時,會緩存不活動的組件實例,而不是銷毀它們。和 <transition> 相似,<keep-alive> 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現(xiàn)在父組件鏈中。(所以不會觸發(fā)mounted和created事件鉤子)
當組件在 <keep-alive> 內(nèi)被切換,它的 activated (激活)和 deactivated (不激活)這兩個生命周期鉤子函數(shù)將會被對應執(zhí)行。
include and exclude
include (緩存的文件)和 exclude(不換存文件) 屬性允許組件有條件地緩存。
<!-- 逗號分隔字符串 --> <keep-alive include="a,b"> ? <component :is="view"></component> </keep-alive> ? <!-- 正則表達式 (使用 `v-bind`) --> <keep-alive :include="/a|b/"> ? <component :is="view"></component> </keep-alive> ? <!-- 數(shù)組 (使用 `v-bind`) --> <keep-alive :include="['a', 'b']"> ? <component :is="view"></component> </keep-alive>
max
最多可以緩存多少組件實例。
<keep-alive :max="10"> ? <component :is="view"></component> </keep-alive>
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實現(xiàn)動態(tài)添加數(shù)據(jù)滾動條自動滾動到底部的示例代碼
本篇文章主要介紹了vue實現(xiàn)動態(tài)添加數(shù)據(jù)滾動條自動滾動到底部的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07vuex 動態(tài)注冊方法 registerModule的實現(xiàn)
這篇文章主要介紹了vuex 動態(tài)注冊方法 registerModule的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07Vue Element前端應用開發(fā)之根據(jù)ABP后端接口實現(xiàn)前端展示
本篇著重介紹基于ABP后端接口信息,實現(xiàn)對前端界面的開發(fā)工作。2021-05-05