vue中路由的動態(tài)keepAlive

如果想讓vue的所有頁面都保持keepAlive的狀態(tài)。只需要在app.vue的router-view外面套一層keep-alive

<keep-alive>
    <router-view></router-view>
 </keep-alive>

如果只想讓某些路由保持keepAlive,只需要向keep-alive傳入include(不想讓某些路由keepAlive,其他的都keepAlive。則需傳入exclude)

<keep-alive :include=['router-name1', 'router-name2']>
    <router-view></router-view>
 </keep-alive>

而include的數(shù)組完全可以通過函數(shù)獲取。所以只需要在router.js中,在定義每個路由時說明其是keepAlive,并且在app.js中能夠獲取到該狀態(tài)即可。這里給出的做法是定義路由時,通過meta給出狀態(tài),并將該狀態(tài)的路由存入sessionStorage,在app.js中再通過sessionStorage取出來。

import Router from 'vue-router'
const routes = [
{
    name: 'home',
    path: '/home',
    component: () => import('..xxx'),
    meta: {
      title: 'xxx',
      desc: 'xxx',
      keepAlive: true
    }
  }
]
const router = new Router({
  routes
})
const includeRouters = sessionStorage.get('keepAliveRouters') || []  //需自己封裝sessionStorage
router.beforeEach(function (to, from, next) {
    if (to.meta) {
      if (to.meta.keepAlive) {
          includeRouters.push(router.name) //建議自己封裝pushX,已經(jīng)存入則不必再存
      } else {
          includeRouters.remove(router.name) // 自己封裝remove,如果已經(jīng)存入,則取出
        }
      sessionStorage.set('keepAliveRouters', includeRouters)
    }
  next()
}
export default router

此時,在進(jìn)入某個路由前,路由的地址已經(jīng)存入了sessionStorage
app.vue中需要watch $router ,并從sessionStorage中取出,放到data里。
keepAlive的:include再返回data中剛放入的地址數(shù)組

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容