天天看點

ajax 關閉 keep alive,vue開啟keep-alive需要注意的問題

為了讓元件資料緩存,避免每次資源重複加載(例如每次切換導航時資料會重新加載一次,體驗真的差),是以使用了keep-alive,解決了以上産生的問題。

ajax 關閉 keep alive,vue開啟keep-alive需要注意的問題

封面.jpg

一、開啟keep-alive

在這裡keep-alive配合了router-view使用,keep-alive本身是vue2.0的功能,并不是vue-router的,是以在vue1.0版本是不支援的。

二、産生的問題

keep-alive能使元件資料緩存,是以。如果有一個新聞清單,點選進入檢視詳情,傳回點選檢視其他新聞詳情這時發現資料并沒有更新,造成了資料不重新整理的情況。

是以,我試了以下網友提出的解決方法,發現并沒有什麼用(或許是我弄錯了)。

//在router檔案加上meta判斷

import Vue from 'vue'

import Router from 'vue-router'

Vue.use(Router)

export default new Router({

{//home會被緩存

path:"/home",

component:home,

meta:{keepAlive: true}

}

{//hello不會被緩存

path:"/hello",

component:hello,

meta:{keepAlive: false}

}

})

三、我的解決方法

是以,個人拙見,我是這麼解決的。在詳情元件裡監聽路由變化再次指派給ID,通過activated鈎子觸發請求函數,這時傳回詳情頁面再次進入發現原有的資料還在,但是過幾秒後資料就重新整理了,資料是重新整理了但是體驗是非常不好的。是以需要用到另一個鈎子deactivated銷毀,離開詳情頁面時(deactivated)通過小技巧把目前的内容隐藏,再次進入詳情頁面時(activated)就不會看到原來的内容了,然後ajax請求資料完成後把它顯示出來即可。

當引入keep-alive的時候,頁面第一次進入,鈎子的觸發順序created-> mounted-> activated,退出時觸發deactivated。當再次進入(前進或者後退)時,隻觸發activated。

//$route發生變化時再次指派listId

watch: {

'$route'() {

this.listId = this.$route.params.id;

}

},

//通過activated鈎子觸發請求函數

activated() {

this.getDetail();

},

//傳回詳情頁面時 隐藏内容div區塊 再進入詳情時 顯示内容div區塊

deactivated() {

this.isShowContent = false;

}

四、2019新發現

使用exclude屬性不緩存模闆元件即可,沒有上面那麼複雜了。

//不緩存detail元件