1. 程式人生 > >vue路由在keep-alive下的刷新問題

vue路由在keep-alive下的刷新問題

但是 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下的刷新問題