vue路由在keep-alive下的刷新問題
阿新 • • 發佈:2018-01-17
但是 ansi router 屬性 mode 建議 類型 生命周期 路由
問題描述:
在keep-alive中的在跳轉到指定的路由時刷新對應的路由,其余不刷新。
<transition name="fade" mode="out-in"> <keep-alive> <router-view></router-view> </keep-alive> </transition>
有幾種解決方式:
1.在keep-alive中直接添加 include,cachedViews(Array類型:包含vue文件的組件name都將被緩存起來);反之exclude則是不包含;
註意:所有.vue組件文件都必須附上name屬性!!!建議用vuex管理cachedViews
<keep-alive :include="cachedViews"> <router-view></router-view> </keep-alive>
2.監測$router的變化;
watch: { // 如果路由有變化,會再次執行該方法 "$route": "fetchDate" }
但是會在頁面離開時再次執行fetchDate,並不是我們需要的,所以可以在to和from上添加執行邏輯,但也是十分的麻煩
$route (to, from) { if(list.indexOf(from.path) > -1){ //自行添加邏輯,list為你不想有緩存的路徑 this.getData() } }
3.在添加keep-alive後會增加兩個生命周期mounted>activated、離開時執行deactivated,這樣就可以在每次入路由執行更細致的操作了
//如果是服務端渲染就算了
activated() { //只刷新數據,不改變整體的緩存 this.fetchDate(); }
4.還有更簡單粗暴的
//我就笑笑不說話
<div> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div>
vue路由在keep-alive下的刷新問題