vue頁面重新整理與快取

2021-09-24 15:58:29 字數 2647 閱讀 1836

在vue專案中,有些元件沒必要多次渲染,我們需要元件在記憶體中快取下來。此時keep-alive就可以派上用場了,keep-alive可以使被包含的元件狀態維持不變,即便是元件切換了,其內的狀態依舊維持在記憶體之中。在下一次顯示時,也不會重現渲染。

ps:keep-alivetransition相似,只是乙個抽象元件,它不會在dom樹中渲染(真實或者虛擬都不會),也不在父元件鏈中存在,比如:你永遠在this.$parent中找不到keep-alive

最基礎的一般是結合動態元件去使用:

new vue(

}})

被包含在中建立的元件,會多出兩個生命週期的鉤子:activateddeactivated

在元件被啟用時呼叫,在元件第一次渲染時也會被呼叫,之後每次keep-alive啟用時被呼叫。

在元件被停用時呼叫。

注意:只有元件被keep-alive包裹時,這兩個生命週期才會被呼叫,如果作為正常元件使用,是不會被呼叫,以及在2.1.0版本之後,使用exclude排除之後,就算被包裹在keep-alive中,這兩個鉤子依然不會被呼叫!另外在服務端渲染時此鉤子也不會被呼叫的。

有些時候可能需要將整個路由頁面一切快取下來,也就是將router-view進行快取。這種使用場景還是蠻多的。

在vue2.1.0之前,大部分是這樣實現的:

new router(},]

})

這樣配置路由的路由元資訊之後,a路由的$router.meta.keepalive便為true,而b路由則為false

所以為true的將被包裹在keep-alive中,為false的則在外層。這樣a路由便達到了被快取的效果,如果還有想要快取的路由,只需要在路由元中加入keepalive: true即可。

在vue2.1.0版本之後,keep-alive新加入了兩個屬性:include(包含的元件快取生效) 與exclude(排除的元件不快取,優先順序大於include) 。

includeexclude屬性允許元件有條件地快取。二者都可以用逗號分隔字串、正規表示式或乙個陣列來表示。

當使用正則或者是陣列時,一定要使用v-bind!

有了include之後,再與router-view一起使用時便方便許多了:

keep-alive先匹配被包含元件的name字段,如果name不可用,則匹配當前元件componetns配置中的註冊名稱。對於router-view來說,則是匹配路由器註冊時的name與路由對應元件的name值。

keep-alive不會在函式式元件中正常工作,因為它們沒有快取例項。

當匹配條件同時在includeexclude存在時,以exclude優先順序最高。比如:包含於排除同時匹配到了元件a,那元件a不會被快取。

包含在keep-alive中,但符合exclude,不會呼叫activateddeactivated

使用keep-alive有乙個後遺症,就是如果進入同乙個路由帶動態引數或者查詢引數改變的話,頁面會一直使用最開始快取的頁面,頁面不會再進行重新整理請求引數。利用watch來監控$route是乙個方法,但也不是特別好用,因為如果只是查詢引數改變的話是不會觸發改變的。

different router the same component vue。真實的業務場景中,這種情況很多。

建立和編輯的頁面使用的是同乙個component,預設情況下當這兩個頁面切換時並不會觸發vue的created或者mounted鉤子,官方說你可以通過watch $route的變化來做處理,但其實說真的還是蠻麻煩的。後來發現其實可以簡單的在router-view上加上乙個唯一的key,來保證路由切換時都會重新渲染觸發鉤子了。這樣簡單的多了。

頁面快取重新整理

在chrome瀏覽器中按下f5或 ctrl f5 都沒用,chrome總是會強制使用頁面快取進行重新整理,如何不使用頁面快取進行重新整理?chrome官方推薦使用如下快捷鍵,就可以不使用頁面快取進行重新整理 windows和linux作業系統 shift f5或ctrl shift r mac os...

vue 刪除頁面快取 Vue實現頁面快取

在 使用vue開發時,當進行頁面之間的切換時,上乙個頁面將會被銷毀。但是當我們想節省效能以及保留使用者上次操作的結果或避免ajax重複請求的時候,需要把某些特定的頁面快取下來。在vue中,提供了內建元件keep alive 包裹動態元件時,會快取不活動的元件例項,而不是銷毀它們。和相似,是乙個抽象元...

頁面重新整理 重新整理vue頁面,解決資料丟失

解決方法一 最先想到的應該就是利用localstorage sessionstorage將資料儲存在外部,做乙個持久化儲存,下面是利用localstorage儲存的具體方案 方案一 由於state中的資料是響應式的,而資料又是通過mutation來進行修改,故在通過mutation修改state中資...