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 },