keep-alive+router-view 實現(xiàn)頁面緩存

問題描述

在做項目時斜纪,在管理后臺中有一個申請單管理模塊(帶分頁的)徘铝,可以查看用戶的申請狀態(tài),點擊操作中詳情可以進(jìn)入詳情頁面奖年,詳情可以返回申請單列表细诸,詳情頁面是通過路由配置的,這個時候進(jìn)入詳情頁面申請單列表頁面會被銷毀陋守,當(dāng)我們通過router.go(-1),或者router.push() 再次進(jìn)入申請單列表頁面時震贵,會重新執(zhí)行 beforeCreate -> created -> beforeMount -> mounted ... 申請單列表的狀態(tài)都重新初始化,無法記錄進(jìn)入之前已經(jīng)選擇的分頁或者條件 水评。猩系。。
總結(jié)如下:

  1. 從詳情頁返回申請單記錄進(jìn)入詳情之前的狀態(tài)
  2. 從其他路由進(jìn)入不能記錄離開之前的狀態(tài)之碗,必須初始化為第一次進(jìn)入的狀態(tài)

解決辦法

網(wǎng)上一查一大堆解決方案蝙眶,但是自己嘗試一下了都不是很滿足,大概有以下幾種

  1. 通過keep-alive 設(shè)置include,自己項目里反正不起作用幽纷,我確信自己的組件內(nèi)部設(shè)置了 name 屬性 式塌,vue 版本2.5.2 (待解決)
<!-- App.vue-->
<template>
  //   :include="['ApplyManage']"  include="ApplyManage" 這兩種寫法都沒有起作用
  <keep-alive :include="['ApplyManage']"> 
    <router-view></router-view>
  <keep-alive>
</template>
  1. 通過設(shè)置路由meta字段keepAlive,通過這種方式設(shè)置確實可以實現(xiàn)詳情返回申請單列表記錄了上次狀態(tài),但是又有一個新的問題友浸,從其他頁面進(jìn)入申請單列表記錄的還是上次退出申請單列表的狀態(tài)峰尝,這個就很不友好。收恢。武学。
// router.js,這里只是示例
const router = [
  {
    path:'/apply-list',
    name:'ApplyManage',
    component:() => import('@/views/ApplyManage'),
    meta:{ title:'申請單列表', keepAlive:true }
  },
  {
    path:'/apply-detail',
    name:'ApplyDetail',
    component:() => import('@/views/ApplyDetail'),
    meta:{ title:'申請單詳情', keepAlive:true }
  }
]
<!-- App.vue-->
<template>
  <keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
</template>

上面代碼已經(jīng)完成了我們大部分的功能伦意,我們在這個基礎(chǔ)上修改一下火窒,也就是退出申請單列表需要將申請單狀態(tài)重置,但是進(jìn)入詳情不重置驮肉。這個時候組件內(nèi)導(dǎo)航鉤子就配上用場了 beforeRouteEnter, beforeRouteLeave

// Home.vue
<script>
  export default {
    data(){
      return{
        isFirstEnter:false  // 標(biāo)識是否第一次進(jìn)入
      }
    },
    created(){
      this.isFirstEnter = true
    },
    activated(){
      // 緩存后只有這個鉤子和deactivated 運行熏矿,我們在這里判斷,只有第一次進(jìn)入或者是通過其他頁面返回不是詳情返回就重新調(diào)用數(shù)據(jù)
      if(this.$route.meta.isBack || this.isFirstEnter) {
        this.page.currentPage = 1
        this.searchData()
      }
      this.$route.meta.isBack = false // 要進(jìn)入就要設(shè)置false
      this.isFirstEnter = false  // 必須要設(shè)置false,否則每次就重新刷新數(shù)據(jù)
    },
    methods:{
      // 獲取申請單數(shù)據(jù)
      searchData(){}, 
      // 我這里添加這個鉤子是因為路由表是接口返回的离钝,接口返回數(shù)據(jù)沒有配置這個屬性票编,所以在代碼里加入
      beforeRouteEnter(to,from,next){
        to.meta.keepAlive = true
        next() // 一定要調(diào)用
      },
      beforeRouteLeave(to,from,next){
      if(to.name == 'ApplyDetail') {
        from.meta.isBack = true
        next()
      }else{
         // 如果是去其他頁面將申請單列表的isBack 設(shè)置為false,這樣第二次進(jìn)入就會進(jìn)入activated中判斷重新獲取數(shù)據(jù),
        form.meta.isBack = false
        next()  
      }
    }
   }
 }
</script>

經(jīng)過上面的設(shè)置卵渴,我們大致完成了我們的需求慧域,從 a進(jìn)入申請單列表頁面不緩存 ,申請單列表進(jìn)入詳情緩存浪读,如果在申請單有一些過濾條件的選擇昔榴,我們這樣設(shè)置了之后,狀態(tài)還是保留了瑟啃,我們可以在退出之后將狀態(tài)初始化就可以了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末论泛,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛹屿,更是在濱河造成了極大的恐慌,老刑警劉巖岩榆,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件错负,死亡現(xiàn)場離奇詭異,居然都是意外死亡勇边,警方通過查閱死者的電腦和手機犹撒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粒褒,“玉大人识颊,你說我怎么就攤上這事。” “怎么了祥款?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵清笨,是天一觀的道長。 經(jīng)常有香客問我刃跛,道長抠艾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任桨昙,我火速辦了婚禮检号,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛙酪。我一直安慰自己齐苛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布桂塞。 她就那樣靜靜地躺著凹蜂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藐俺。 梳的紋絲不亂的頭發(fā)上炊甲,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音欲芹,去河邊找鬼卿啡。 笑死,一個胖子當(dāng)著我的面吹牛菱父,可吹牛的內(nèi)容都是我干的颈娜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浙宜,長吁一口氣:“原來是場噩夢啊……” “哼官辽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粟瞬,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤同仆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裙品,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俗批,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年市怎,在試婚紗的時候發(fā)現(xiàn)自己被綠了岁忘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡区匠,死狀恐怖干像,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤麻汰,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布速客,位于F島的核電站,受9級特大地震影響什乙,放射性物質(zhì)發(fā)生泄漏挽封。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一臣镣、第九天 我趴在偏房一處隱蔽的房頂上張望辅愿。 院中可真熱鬧,春花似錦忆某、人聲如沸点待。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽癞埠。三九已至,卻和暖如春聋呢,著一層夾襖步出監(jiān)牢的瞬間苗踪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工削锰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留通铲,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓器贩,卻偏偏與公主長得像颅夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蛹稍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容