在vue專案中,有些元件沒必要多次渲染,我們需要元件在記憶體中快取下來。此時keep-alive
就可以派上用場了,keep-alive
可以使被包含的元件狀態維持不變,即便是元件切換了,其內的狀態依舊維持在記憶體之中。在下一次顯示時,也不會重現渲染。
ps:最基礎的一般是結合動態元件去使用:keep-alive
與transition
相似,只是乙個抽象元件,它不會在dom樹中渲染(真實或者虛擬都不會),也不在父元件鏈中存在,比如:你永遠在this.$parent
中找不到keep-alive
。
new vue(
}})
被包含在
中建立的元件,會多出兩個生命週期的鉤子:activated
與deactivated
在元件被啟用時呼叫,在元件第一次渲染時也會被呼叫,之後每次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) 。
include
和exclude
屬性允許元件有條件地快取。二者都可以用逗號分隔字串、正規表示式或乙個陣列來表示。
當使用正則或者是陣列時,一定要使用v-bind
!
有了include之後,再與router-view
一起使用時便方便許多了:
keep-alive
先匹配被包含元件的name
字段,如果name
不可用,則匹配當前元件componetns
配置中的註冊名稱。對於router-view
來說,則是匹配路由器註冊時的name
與路由對應元件的name
值。
keep-alive
不會在函式式元件中正常工作,因為它們沒有快取例項。
當匹配條件同時在include
與exclude
存在時,以exclude
優先順序最高。比如:包含於排除同時匹配到了元件a,那元件a不會被快取。
包含在keep-alive
中,但符合exclude
,不會呼叫activated
和deactivated
。
使用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中資...