Vue設(shè)置keepAlive不生效問(wèn)題及解決
設(shè)置keepAlive不生效
如演示,Vue頁(yè)面導(dǎo)航回退后頁(yè)面重新刷新了,搜索條件及結(jié)果都重置了,對(duì)于頁(yè)面需要頻繁切換的系統(tǒng)來(lái)說(shuō),體驗(yàn)不佳,我們希望頁(yè)面第一次打開(kāi)時(shí)加載,此后回退不再刷新
查閱了Vue官網(wǎng)后,發(fā)現(xiàn)vue2.0提供了一個(gè)keep-alive組件。
1.在App.vue中的設(shè)置
<template> <div id="app"> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template>
2.在router中的index.js設(shè)置
利用meta屬性
export default[ { path:'/', name:'home', components:Home, meta:{ keepAlive:true //需要被緩存的組件 }, { path:'/book', name:'book', components:Book, meta:{ keepAlive:false //不需要被緩存的組件 } ]
正常的話這樣頁(yè)面就能緩存并生效了,如果還是不生效
檢查這個(gè)組件在router文件中的配置name和組件實(shí)例中的name不一致,如下面,全局守衛(wèi)中拿到的to或from的name是從router中對(duì)應(yīng)的路由對(duì)象中拿的,而App.js 中的keepAlive標(biāo)簽中的exclude是對(duì)比的組件實(shí)例中的name
使用過(guò)程發(fā)現(xiàn),組件的name和router配置的name不一樣,keep-alive也無(wú)法生效,這里也提供給我們一種思路,如果頁(yè)面不需要緩存,把name設(shè)置不一樣就好了(不推薦使用)
keep-alive緩存組件不生效的坑
坑出現(xiàn)背景
在維護(hù)公司代碼時(shí)發(fā)現(xiàn)里面寫watch route不生效,無(wú)法監(jiān)聽(tīng)子路由的table切換。組件不會(huì)緩存,但是全局組件已經(jīng)做過(guò)緩存處理。此處每次進(jìn)入此table頁(yè)都會(huì)觸發(fā)created周期?;ㄙM(fèi)大半個(gè)小時(shí)之后終于找到了問(wèn)題點(diǎn)
坑的原因
keep-alive緩存時(shí)include中的名字必須與組件上的名字完全一致,組件沒(méi)有寫名字或者名字不一致就會(huì)導(dǎo)致緩存失效,每次進(jìn)入組件都觸發(fā)created生命周期
代碼如下
全局組件中
? <keep-alive include="history"> ? ? ? ?<router-view></router-view> ? ? </keep-alive>
組件中
export default { ? name: "history",/*此處的name必須有且與include中的一致*/ ? components: { ? ? VTable ? },
如是,問(wèn)題解決!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue路由組件的緩存keep-alive和include屬性的具體使用
- Vue?keepAlive實(shí)現(xiàn)不同的路由共用一個(gè)組件component的緩存問(wèn)題(推薦)
- vue中keep-alive組件實(shí)現(xiàn)多級(jí)嵌套路由的緩存
- vue3緩存頁(yè)面keep-alive及路由統(tǒng)一處理詳解
- 詳解vue-template-admin三級(jí)路由無(wú)法緩存的解決方案
- vue動(dòng)態(tài)添加路由addRoutes之不能將動(dòng)態(tài)路由存入緩存的解決
- vue3中使用keepAlive緩存路由組件不生效的問(wèn)題解決
相關(guān)文章
Vue keepAlive頁(yè)面強(qiáng)制刷新方式
這篇文章主要介紹了Vue keepAlive頁(yè)面強(qiáng)制刷新方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05vue實(shí)現(xiàn)模態(tài)框的通用寫法推薦
下面小編就為大家分享一篇vue實(shí)現(xiàn)模態(tài)框的通用寫法推薦,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02vue中使用axios post上傳頭像/圖片并實(shí)時(shí)顯示到頁(yè)面的方法
今天小編就為大家分享一篇vue中使用axios post上傳頭像/圖片并實(shí)時(shí)顯示到頁(yè)面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Element的穿梭框數(shù)據(jù)量大時(shí)點(diǎn)擊全選卡頓的解決方案
本文主要介紹了Element的穿梭框數(shù)據(jù)量大時(shí)點(diǎn)擊全選卡頓的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10移動(dòng)端滑動(dòng)切換組件封裝 vue-swiper-router實(shí)例詳解
這篇文章主要介紹了移動(dòng)端滑動(dòng)切換組件封裝 vue-swiper-router實(shí)例詳解,需要的朋友可以參考下2018-11-11VUE3數(shù)據(jù)的偵聽(tīng)超詳細(xì)講解
在Vue3中watch特性進(jìn)行了一些改變和優(yōu)化,與computed不同,watch通常用于監(jiān)聽(tīng)數(shù)據(jù)的變化,并執(zhí)行一些副作用,這篇文章主要給大家介紹了關(guān)于VUE3數(shù)據(jù)偵聽(tīng)的相關(guān)資料,需要的朋友可以參考下2023-12-12vuejs 動(dòng)態(tài)添加input框的實(shí)例講解
今天小編就為大家分享一篇vuejs 動(dòng)態(tài)添加input框的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08