vue3.0列表頁(yè)面做緩存的方法代碼
一.設(shè)置動(dòng)態(tài)keepalive
<router-view v-slot="{ Component, route }">
<keep-alive :include="cacheViewsState">
<component :is="Component" />
</keep-alive>
</router-view>可以將要緩存的頁(yè)面作為vuex全局變量?jī)?chǔ)存
const cacheViewsState = store.state.app.cachedViews
將cachedViews 存入vuex:
state: {
cachedViews: ['listPage']
},
mutations:{
ADD_CACHED_VIEW: (state, view) => {
if (state.cachedViews.includes(view)) return
state.cachedViews.push(view)
},
DEL_CACHED_VIEW: (state, view) => {
const index = state.cachedViews.indexOf(view)
index > -1 && state.cachedViews.splice(index, 1)
}
},
actions: {
//添加緩存組件
addCachedView({ commit }, view) {
commit('ADD_CACHED_VIEW', view)
},
//刪除緩存組件
delCachedView({ commit, state }, view) {
return new Promise((resolve) => {
commit('DEL_CACHED_VIEW', view)
resolve([...state.cachedViews])
})
}
}二.頁(yè)面初始化數(shù)據(jù)緩存處理
將頁(yè)面導(dǎo)出命名空間設(shè)置為動(dòng)態(tài)緩存頁(yè)面名單
<script>
export default {
name: 'listPage'
}
</script>onActivated 注冊(cè)一個(gè)回調(diào)函數(shù),若組件實(shí)例是 <KeepAlive> 緩存樹的一部分,當(dāng)組件從 DOM 中被移除時(shí)調(diào)用。
這個(gè)鉤子在服務(wù)器端渲染期間不會(huì)被調(diào)用。
onActivated(() => {
getList() // 初始化列表
})附:Vue3.0使用keep-alive實(shí)現(xiàn)頁(yè)面緩存不刷新
1.應(yīng)用場(chǎng)景
1.列表頁(yè)進(jìn)入詳情頁(yè),再?gòu)脑斍轫?yè)返回列表頁(yè);列表頁(yè)緩存不刷新。保持原來選中的查詢參數(shù)以及當(dāng)前頁(yè)
2.某個(gè)新增頁(yè)面分為兩步,分為A頁(yè)面和B頁(yè)面;當(dāng)?shù)谝徊紸頁(yè)面信息填好后,點(diǎn)擊下一步到第二步B頁(yè)面。再返回到第一步A頁(yè)面,A頁(yè)面信息不丟失。同理第二步填好信息返回到第一步,再回到第二頁(yè),第二頁(yè)頁(yè)面信息不丟失。
2.解決步驟
1.App.vue
//isRouterAlive:通過先設(shè)置isRouterAlive為false再設(shè)置為true可實(shí)現(xiàn)組件的銷毀
<router-view v-slot="{ Component }" v-if="isRouterAlive">
<keep-alive>
<component :is="Component" v-if="_this.$route.meta.keepAlive" :key="$route.name" />
</keep-alive>
<component :is="Component" v-if="!_this.$route.meta.keepAlive" />
</router-view>2.router.js
//設(shè)置meta
const routes: Array<RouteRecordRaw> = [
{
path: 'list',
name: 'list',
meta: { keepAlive: true, cacheList: ['detail'] },
component: () => import('@/views/list.vue')
},
]
//路由攔截
router.beforeEach((to, from, next) => {
//從cacheList中的任何一個(gè)頁(yè)面返回,當(dāng)前頁(yè)面緩存
const cacheList: any = to.meta.cacheList
if (cacheList) {
if (cacheList.indexOf(from.name) > -1) {
to.meta.keepAlive = true
} else {
//解決第一次不緩存問題
if (from.name) {
to.meta.keepAlive = false
} else {
to.meta.keepAlive = true
}
}
}
next()
}3.list.vue
import { defineComponent, nextTick } from 'vue'
import { onBeforeRouteLeave } from 'vue-router'
export default defineComponent({
name: 'list',
setup() {
onBeforeRouteLeave((to, from, next) => {
//當(dāng)即將訪問的界面不是detail則銷毀組件,以免上一次緩存信息存在
const cacheList: any = ['detail']
if (cacheList.indexOf(to.name) === -1) {
//銷毀緩存信息(vue3沒有_this.$destory()方法,所以通過v-if實(shí)現(xiàn)組件的銷毀)
//vuex改變?nèi)肿兞縤sRouterAlive的值
_this.$store.commit('menu/changeRouterAlive', false)
nextTick(() => {
_this.$store.commit('menu/changeRouterAlive', true)
})
}
next()
})
}
})總結(jié)
到此這篇關(guān)于vue3.0列表頁(yè)面做緩存的文章就介紹到這了,更多相關(guān)vue3.0列表頁(yè)面緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你掌握Vue?Router4進(jìn)行頁(yè)面跳轉(zhuǎn)處理
Vue?Router是Vue.js官方的路由管理器,它能讓你用組件化的思維來管理你的頁(yè)面和視圖,這篇文章會(huì)帶你從零開始介紹Vue?Router4處理頁(yè)面跳轉(zhuǎn)的相關(guān)知識(shí)吧2025-12-12
基于Vue實(shí)現(xiàn)文件上傳的幾種實(shí)現(xiàn)方式
文件上傳是web開發(fā)中一個(gè)常見的需求,Vue.js作為一款流行的前端框架,也提供了方便的方法來實(shí)現(xiàn)文件上傳功能,下面這篇文章主要給大家介紹了關(guān)于基于Vue實(shí)現(xiàn)文件上傳的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下2024-03-03
vue2項(xiàng)目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題
這篇文章主要介紹了vue2項(xiàng)目使用element-ui的el-tabs組件導(dǎo)致瀏覽器崩潰卡死問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法
這篇文章主要介紹了vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決
這篇文章主要介紹了vue.set向?qū)ο罄镌黾佣鄬訑?shù)組屬性不生效問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
Vue+ElementUI使用vue-pdf實(shí)現(xiàn)預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了Vue+ElementUI使用vue-pdf實(shí)現(xiàn)預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
詳解win7 cmd執(zhí)行vue不是內(nèi)部命令的解決方法
這篇文章主要介紹了詳解win7 cmd執(zhí)行vue不是內(nèi)部命令的解決方法的相關(guān)資料,這里提供了解決問題的詳細(xì)步驟,具有一定的參考價(jià)值,需要的朋友可以參考下2017-07-07
vue3點(diǎn)擊出現(xiàn)彈窗后背景變暗且不可操作的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue3點(diǎn)擊出現(xiàn)彈窗后背景變暗且不可操作的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

