vue利用keep-alive/beforeRouteLeave前進刷新后退不刷新(緩存)


 

keep-alive緩存

在vue中默認router-link進入頁面組件都是不緩存的。對於數據不會更新的頁面。可以使用keep-alive來緩存以提高性能。
在項目src/router/index.js中。對於需要緩存的路由加meta中加上keepAlive: true
1 export default new Router({
2   routes: [
3     {path: '/',
4       redirect: '/Home',
5       meta: {keepAlive: true,}
6     },
7 ]
8 })

在app.vue中

1 2 <router-view></router-view>
3 改為
4 <keep-alive>
5       <router-view v-if="$route.meta.keepAlive"></router-view>
6 </keep-alive>
7 <router-view v-if="!$route.meta.keepAlive"></router-view>
8     

 



利用beforeRouteLeave動態決定要不要緩存刷新。

要求:

首頁Home-列表頁List-詳情頁Detail。前進刷新,后退不刷新,且還在原來的滾動位置。

即除了在詳情頁退到列表頁不刷新外,其他方式(搜索、分類、推薦等)進入列表都刷新。

在router/index.js中,Llist路由加上keepAlive: true, 

 
{
      path: '/list/:categoryId?/',
      name: 'List',
      component: List,
      meta: {
        keepAlive: true, 
},
{
      path: '/detail/:goodsId',
      name: 'Detail',
      component: Detail
}

 

在vue中
 beforeRouteLeave (to, from, next) { }
表示在路由頁面離開時執行。
其中to表示下一個要進入的路由。form表示當前頁面路由。next()表示執行跳轉。
我們只需要在函數中判斷,只要下一級是Detail則把List的keepAlive設為true,其他設為false即可。
1 beforeRouteLeave (to, from, next) {
2         if (to.name == "Detail"){
3             from.meta.keepAlive = true;
4         }else{
5             from.meta.keepAlive = false;
6         }
7         next();
8     },

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM