av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

解決vue單頁(yè)面 回退頁(yè)面 keeplive 緩存問(wèn)題

瀏覽:110日期:2022-12-30 17:07:15

場(chǎng)景:項(xiàng)目中遇到 vue 點(diǎn)擊回退 從A頁(yè)跳到B頁(yè),緩存A頁(yè),當(dāng)B頁(yè)狀態(tài)修改再次返回A時(shí),A頁(yè)查詢條件緩存不刷新,列表刷新

A頁(yè):

解決vue單頁(yè)面 回退頁(yè)面 keeplive 緩存問(wèn)題

B頁(yè):

解決vue單頁(yè)面 回退頁(yè)面 keeplive 緩存問(wèn)題

解決方法:

利用keep-alive 緩存需要緩存的頁(yè)面

1.在app.vue中改寫router-view

<template> <div id='app'> <keep-alive> <router-view v-if='$route.meta.keepAlive'> <!-- 這里是會(huì)被緩存的視圖組件,比如 page1,page2 --> </router-view> </keep-alive> <router-view v-if='!$route.meta.keepAlive'> <!-- 這里是不被緩存的視圖組件,比如 page3 --> </router-view> </div></template>

2.在router/index.js中添加路由元信息,設(shè)置需要緩存的頁(yè)面

keepAlive:設(shè)置需要緩存的頁(yè)面

isBack:通過(guò)beforeRouteEnter這個(gè)鉤子函數(shù)中的from參數(shù)判斷是從哪個(gè)頁(yè)面過(guò)來(lái)的,這個(gè)參數(shù)執(zhí)行時(shí),組件實(shí)例還沒(méi)創(chuàng)建,不能在data中定義變量。所以我們可以在路由中定義一個(gè)變量isBack,用來(lái)判斷。

{ path: ’/trade’, name: ’trade’, component: () => import( /* webpackChunkName: 'about' */ ’@/views/trade.vue’), meta: { title:’trade.tradeTitle’, keepAlive: true, // 此組件需要被緩存 isBack:false, //用于判斷上一個(gè)頁(yè)面是哪個(gè) } }, { path: ’/detail/:id’, name: ’detail’, component: () => import( /* webpackChunkName: 'about' */ ’@/views/detail.vue’), meta: { title:’trade.detailTitle’, keepAlive: false, isBack:false,//用于判斷上一個(gè)頁(yè)面是哪個(gè) } },

鉤子函數(shù)的執(zhí)行順序:

不使用keep-alive

beforeRouteEnter --> created --> mounted --> destroyed

使用keep-alive

beforeRouteEnter --> created --> mounted --> activated --> deactivated

再次進(jìn)入緩存的頁(yè)面,只會(huì)觸發(fā)beforeRouteEnter -->activated --> deactivated 。created和mounted不會(huì)再執(zhí)行。我們可以利用不同的鉤子函數(shù),做不同的事。務(wù)必理解上述鉤子函數(shù)的執(zhí)行時(shí)機(jī)和執(zhí)行順序,本教程的核心就依賴于此鉤子函數(shù)

activated和deactivated是使用keep-alive后,vue中比較重要的兩個(gè)鉤子函數(shù),建議詳細(xì)了解下。

在A頁(yè)面中通過(guò)beforeRouteEnter這個(gè)鉤子函數(shù)中判斷是從哪個(gè)頁(yè)面過(guò)來(lái)的

beforeRouteLeave(to, from, next) { // 路由導(dǎo)航鉤子,此時(shí)還不能獲取組件實(shí)例 `this`,所以無(wú)法在data中定義變量(利用vm除外) // 參考 https://router.vuejs.org/zh-cn/advanced/navigation-guards.html // 所以,利用路由元信息中的meta字段設(shè)置變量,方便在各個(gè)位置獲取。這就是為什么在meta中定義isBack // 參考 https://router.vuejs.org/zh-cn/advanced/meta.html if (from.path === ’/detail’){ //判斷是從哪個(gè)路由過(guò)來(lái)的, //如果是B頁(yè)面即detail頁(yè)面過(guò)來(lái)的,表明當(dāng)前頁(yè)面不需要刷新獲取新數(shù)據(jù),直接用之前緩存的數(shù)據(jù)即可 to.meta.isBack = true; }else{ to.meta.isBack = false; } next(); },

data中定義變量isFirstEnter用來(lái)判斷是否第一次進(jìn)入,或是否刷新了頁(yè)面,默認(rèn)false

data() { return { isFirstEnter:false, }; },

created中把isFirstEnter變?yōu)閠rue,說(shuō)明是第一次進(jìn)入或刷新了頁(yè)面

created() { this.isFirstEnter=true; // 只有第一次進(jìn)入或者刷新頁(yè)面后才會(huì)執(zhí)行此鉤子函數(shù) // 使用keep-alive后(2+次)進(jìn)入不會(huì)再執(zhí)行此鉤子函數(shù) this.$nextTick(() => { this.getLists(); }); },

activated中增加判斷條件

activated() { if(this.$route.meta.isBack || !this.isFirstEnter){ // 如果isBack是false,表明需要獲取新數(shù)據(jù),否則就不再請(qǐng)求,直接使用緩存的數(shù)據(jù) // 如果isFirstEnter是true,表明是第一次進(jìn)入此頁(yè)面或用戶刷新了頁(yè)面,需獲取新數(shù)據(jù) this.tradeList=[] this.AjaxList = [] //把數(shù)據(jù)清空,可以稍微避免讓用戶看到之前緩存的數(shù)據(jù) this.pageNum = 1; this.$nextTick(() => { this.getLists(); }); }else{ this.$route.meta.isBack=false this.isFirstEnter=false; }},

以上這篇解決vue單頁(yè)面 回退頁(yè)面 keeplive 緩存問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 日韩一级片视频 | 亚洲亚洲人成综合网络 | 欧美在线视频一区二区 | 六月色婷婷 | 久艹在线观看 | 亚洲一级特黄 | 欧美日韩一区二区三区四区 | 一区二区三区四区在线播放 | 国产精品一区二区在线免费观看 | 伊人av综合| 国产成人一区二区三区 | 国产午夜av | 精品1区| 国产乱轮视频 | 国产欧美在线观看 | 四虎影视av | 欧美激情一区 | 91亚洲国产成人久久精品网站 | 成人一级黄色片 | 欧美一级黄色大片 | 久草免费福利视频 | 天堂中文在线视频 | 四虎成人影视 | 综合激情网站 | 免费网站观看www在线观 | 亚洲人成免费 | 欧美日韩免费一区二区三区 | 91在线小视频 | 91动漫在线观看 | 国产一区二区免费看 | 亚洲一区不卡 | 一本在线 | 亚洲永久免费视频 | 久久艳片www.17c.com | 一区二区视频在线播放 | 九月丁香婷婷 | 国产超碰在线 | 久久国语| 亚洲午夜18毛片在线看 | 久久久午夜| 国产一级免费观看 |