亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

解決vue單頁面 回退頁面 keeplive 緩存問題

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

場景:項目中遇到 vue 點擊回退 從A頁跳到B頁,緩存A頁,當B頁狀態修改再次返回A時,A頁查詢條件緩存不刷新,列表刷新

A頁:

解決vue單頁面 回退頁面 keeplive 緩存問題

B頁:

解決vue單頁面 回退頁面 keeplive 緩存問題

解決方法:

利用keep-alive 緩存需要緩存的頁面

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

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

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

keepAlive:設置需要緩存的頁面

isBack:通過beforeRouteEnter這個鉤子函數中的from參數判斷是從哪個頁面過來的,這個參數執行時,組件實例還沒創建,不能在data中定義變量。所以我們可以在路由中定義一個變量isBack,用來判斷。

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

鉤子函數的執行順序:

不使用keep-alive

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

使用keep-alive

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

再次進入緩存的頁面,只會觸發beforeRouteEnter -->activated --> deactivated 。created和mounted不會再執行。我們可以利用不同的鉤子函數,做不同的事。務必理解上述鉤子函數的執行時機和執行順序,本教程的核心就依賴于此鉤子函數

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

在A頁面中通過beforeRouteEnter這個鉤子函數中判斷是從哪個頁面過來的

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

data中定義變量isFirstEnter用來判斷是否第一次進入,或是否刷新了頁面,默認false

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

created中把isFirstEnter變為true,說明是第一次進入或刷新了頁面

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

activated中增加判斷條件

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

以上這篇解決vue單頁面 回退頁面 keeplive 緩存問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
主站蜘蛛池模板: 91av视频在线观看 | 久草免费福利资源站在线观看 | 免费国产成人高清在线观看不卡 | 欧美精品亚洲精品日韩 | 毛片综合| 日韩色视频在线观看 | 男人免费看片 | 在线一区视频 | 成人午夜视频一区二区国语 | 国产成人久久一区二区三区 | 久青草国产手机视频免费观看 | 亚洲青草视频 | 亚洲视频欧美视频 | 91成人午夜性a一级毛片 | 日韩不卡高清视频 | 久久精品国产半推半就 | 国产特级黄色片 | 免费看成人毛片日本久久 | 国产欧美日 | 综合在线视频精品专区 | 国产第一区精品视频ai换脸 | 免费黄色一级视频 | 91视频免费播放 | 香蕉成视频片在线观看 | 成人网在线视频 | 国产一二精品 | 亚洲国产精品免费视频 | 亚洲一级免费毛片 | 欧美干色| 国产动作大片中文字幕 | 久久久噜噜噜久久中文字幕色伊伊 | 色天天影视 | 免费网站www7788con | 日韩 欧美 中文 亚洲 高清 在线 | 麻豆视频在线观看 | a级精品九九九大片免费看 a级情欲片在线观看免费女中文 | 国产亚洲精品日韩综合网 | 日本三级成人中文字幕乱码 | 国产精品国产三级国快看 | 国产目拍亚洲精品一区二区三区 | 可以免费观看的黄色网址 |