日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

vue缓存页面【二】

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue缓存页面【二】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

keep-alive是vue內置的一個組件,可以使被它包含的組件處于保留狀態,或避免被重新渲染。

用法:

運行結果描述:

input輸入框內,路由切換輸入框內部的內容不會發生改變。
在keep-alive標簽內部添加

include:字符串或正則表達式。只有匹配的組件會被緩存

exclude: 字符串或正則表達式。任何匹配的組件都不會被緩存。


結合router緩存部分頁面:

比較實用的例子:

思路:通過beforeRouterLeave這個鉤子來對路由里面的keepAlive進行賦值。從而動態的確定A頁面是否需要被緩存。

以上轉載自:https://blog.csdn.net/qq_38614249/article/details/79468609
【Vue】Vue2.0頁面緩存和不緩存的方法,以及watch監聽會遇到的問題vue2.0頁面
緩存和不緩存的方法:
1、在app中設置需要緩存的div

<keep-alive>//緩存的頁面<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>//不緩存的頁面
2、在路由router.js中設置.vue頁面是否需要緩存
{path: '/home',component: home,meta: { keepAlive: true },//當前的.vue文件需要緩存 }, { path: '/notice', component: notice,//當前頁面不需要緩存 }
3、從緩存頁面跳轉到不緩存頁面,或者從不緩存頁面跳轉到緩存頁面的時候,會發現watch是不能監聽路由的,是因為緩存和不緩存頁面分別在不同的div里面,一個div里面是不可能監聽到另一個div的路由的,所有需要把監聽的路由都加上緩存(在路由添加 meta: { keepAlive: true }),路由在緩存頁面之間進行跳轉的時候,就可以通過監聽路由來進行判斷數據是否需要更新。

vue中前進刷新、后退緩存用戶瀏覽數據和瀏覽位置的實踐
vue中,我們所要實現的一個場景就是:

1.搜索頁面==>到搜索結果頁時,搜索結果頁面要重新獲取數據,

2.搜索結果頁面==>點擊進入詳情頁==>從詳情頁返回列表頁時,要保存上次已經加載的數據和自動還原上次的瀏覽位置。

最近在項目中遇到這個問題,思考了幾套方案,總是不太完善。百度搜到的方案也基本都只能滿足一些很簡單的需求。對于復雜一些的情況,還是有些不完善的地方。以下是個人對于這種場景的一個摸索,也參考了百度。如有更好的方案,歡迎指出。

緩存組件,vue2中提供了keep-alive。首先在我們的app.vue中定義keep-alive:

<keep-alive>      <router-view v-if="$route.meta.keepAlive"/>    
</keep-alive>    
<router-view v-if="!$route.meta.keepAlive"/>

這里是根據路由中的meta源信息中的keepAlive字段來判斷當前路由組件是否需要緩存。這里的meta的keepAlive是我們自定義的,當然你也可以叫別的名字。

下面在router/index.js即我們的路由文件中,定義meta信息:

// list是我們的搜索結果頁面

{      path: '/list',  name: 'List',      component: resolve => require(['@/pages/list'], resolve), meta: { isUseCache: false, // 這個字段的意思稍后再說 keepAlive: true // 通過此字段判斷是否需要緩存當前組件 } },

上面的component: resolve => require(['@/pages/list'], resolve)這里的組件引入方式可能和大家平時寫的有些不一樣,這里是為了路由的懶加載用的,大家可以忽略。按照正常的import引入也可以,這個和本次的主題無關。如此一來,vue的路由會幫我們去緩存list頁面。

刷新數據or緩存數據的實現:
說這之前,先簡單說一下和緩存相關的vue鉤子函數。

設置了keepAlive緩存的組件:

   第一次進入:beforeRouterEnter ->created->…->activated->…->deactivated后續進入時:beforeRouterEnter ->activated->deactivated

可以看出,只有第一次進入該組件時,才會走created鉤子,而需要緩存的組件中activated是每次都會走的鉤子函數。所以,我們要在這個鉤子里面去判斷,當前組件是需要使用緩存的數據還是重新刷新獲取數據。思路有了,下面我們來實現:

// list組價的activated鉤子activated() {// isUseCache為false時才重新刷新獲取數據// 因為對list使用keep-alive來緩存組件,所以默認是會使用緩存數據的         if(!this.$route.meta.isUseCache){ this.list = []; // 清空原有數據 this.onLoad(); // 這是我們獲取數據的函數 } },

這里的isUseCache 其實就是我們用來判斷是否需要使用緩存數據的字段,我們在list的路由的meta中已經默認設置為false,所以第一次進入list時是獲取數據的。

當我們從詳情頁返回時,我們把list頁面路由的isUseCache設置成true,這樣我們在返回list頁面時會使用緩存數據:

// 詳情頁面的beforeRouteLeave鉤子函數
beforeRouteLeave (to, from, next) {        if (to.name == 'List') {to.meta.isUseCache = true; } next(); },

我們這里是在即將離開detail頁面前判斷是否返回的列表頁。如果是返回list頁面,則把list頁面路由的isUseCache字段設置成true。為什么這樣設置呢?因為我們對list組件使用的keep-alive進行緩存組件,其默認就是使用緩存的。而我們又在list組件的actived鉤子函數中進行了判斷:只有在list頁面的isUseCache==false時才會清空原有數據并重新獲取數據。所以此處設置isUseCache為true,此時返會list頁面是不會重新獲取數據的,而是使用的緩存數據。

detail返回list可以緩存數據了,那么search前往list頁面時怎么讓list頁面不使用緩存數據而是獲取新數據呢?我們重新回到list的activated鉤子中:

// list組價的activated鉤子activated() {// isUseCache為false時才重新刷新獲取數據// 因為對list使用keep-alive來緩存組件,所以默認是會使用緩存數據的         if(!this.$route.meta.isUseCache){ this.list = []; // 清空原有數據 this.onLoad(); // 這是我們獲取數據的函數 this.$route.meta.isUseCache = false; } },

我們加了一行this.$route.meta.isUseCache=false;也就是從detail返回list后,將list的isUseCache字段為false,而從detail返回list前,我們設置了list的isUseCache為true。所以,只有從detail返回list才使用緩存數據,而其他頁面進入list是重新刷新數據的。

至此,一個前進刷新、后退返回的功能基本完成了。

如果場景再復雜一丟丟,比如,如果這個詳情頁是個訂單詳情,那么在訂單詳情頁可能會有刪除訂單的操作。那么刪除訂單操作后會返回訂單列表頁,是需要列表頁重新刷新的。那么我們需要此時在訂單詳情頁進行是否要刷新的判斷。簡單改造一下詳情頁:

data () {    return {isDel: false  // 是否進行了刪除訂單的操作       }
},
beforeRouteLeave (to, from, next) { if (to.name == 'List') { // 根據是否刪除了訂單的狀態,進行判斷list是否需要使用緩存數據 to.meta.isUseCache = !this.isDel; } next(); }, methods: { deleteOrder () { // 這里是一些刪除訂單的操作 // 將狀態變為已刪除訂單 // 所以beforeRouteLeave鉤子中就會將list組件路由的isUseCache設置為false // 所以此時再返回list時,list是會重新刷新數據的 this.isDel = true; this.$router.go(-1) } }

至此,算是解決了我的vue項目中的這個前進刷新、后退緩存數據和瀏覽位置的問題。

最后再提一下,頁面滾動位置的問題。

問題1:我們知道,在vue這種單頁應用中,如果你在a頁面滾動了一段距離后,此時前往b頁面后,b頁面也會停留在a頁面的滾動位置。這個問題的解決,我們可以利用router本身提供的功能來解決:

routes: [    {      path: '/detail',      name: 'Detail',      component: resolve => require(['@/pages/detail'], resolve) } ], scrollBehavior (to, from, savedPosition) { if (savedPosition) { return savedPosition } else { if (from.meta.keepAlive) { from.meta.savedPosition = document.body.scrollTop; } return { x: 0, y: to.meta.savedPosition || 0 } } }

scrollBehavior是路由提供的基礎功能,這段函數寫的是:

1.如果通過瀏覽器自帶的前進后退按鈕切換的路由,那么會自動使用瀏覽默認的回滾上次頁面的瀏覽位置。

2.如果是通過vue路由進行的頁面切換。例如a前往b,首先判斷a是不是通過keep-alive緩存的組件,如果是,則在a路由的meta中添加一個savedPosition字段,并且值為a的滾動位置。最后return的是頁面需要回滾的位置。如此一來,如果打開一個頁面,該頁面的組件路由中meta.savedPosition為undefined的話,則頁面滾動到(0,0)的位置,這樣解決了問題1。那么如果打開一個頁面,它的路由的meta.savedPosition有值的話,則滾動到上次瀏覽的位置,因為meta.savedPosition保存的就是上次瀏覽的位置。
vue中,在本地緩存中讀寫數據的方法
1.安裝good-storage插件
cnpm i good-storage --save
2.讀/寫的方法

common/js/cache.js:
import storage from 'good-storage'const SEARCH_KEY = '__search__' const SEARCH_MAX_LENGTH = 15 // compare:findindex傳入的是function,所以不能直接傳val function insertArray(arr, val, compare, maxLen) { const index = arr.findIndex(compare) if (index === 0) { return } if (index > 0) { arr.splice(index, 1) } arr.unshift(val) // 插入到數組最前 if (maxLen && arr.length > maxLen) { arr.pop() // 刪除末位元素 } } // 存儲搜索歷史 export function saveSearch(query) { let searches = storage.get(SEARCH_KEY, []) insertArray(searches, query, (item) => { return item === query }, SEARCH_MAX_LENGTH) storage.set(SEARCH_KEY, searches) return searches } // 加載本地緩存的搜索歷史 export function loadSearch() { return storage.get(SEARCH_KEY, []) }

3.數據用vuex傳遞
在store/actions.js中寫入數據:

import * as types from './mutation-types'
import {saveSearch} from 'common/js/cache' export const saveSearchHistory = function({commit, state}, query) { commit(types.SET_SEARCH_HISTORY, saveSearch(query)) }

4.組件中調用vuex

import {mapActions} from 'vuex'// methods內:saveSearch() {this.saveSearchHistory(this.query) }, ...mapActions([ 'saveSearchHistory' ])

本文轉載自:https://blog.csdn.net/qq_31393401/article/details/79299606
vue列表進入詳情頁面返回時數據緩存
1.在app.vue中添加

2.在router.index中添加


3.在列表頁面添加

本文轉載自:https://blog.csdn.net/yanby921005/article/details/80360822
vue.js生命周期鉤子函數及緩存
在工作中用到最多的就是created,mounted,activated,deactivated.
由于系統需要緩存,使用了keep-alive

 <keep-alive :include="/keepalive[a-zA-Z]+/"><router-view></router-view> </keep-alive>

include 和 exclude 屬性允許組件有條件地緩存。二者都可以用逗號分隔字符串或正則表達式來表示
匹配首先檢查組件自身的 name 選項,如果 name 選項不可用,則匹配它的局部注冊名稱(父組件 components 選項的鍵值)。匿名組件不能被匹配。
//如果希望頁面緩存,就在當前頁的name屬性,加上符合正則條件的name名稱。不希望就加上不匹配的正則name名稱。
created
實例已經創建完成之后被調用。在這一步,實例已完成以下的配置:數據觀測(data observer),屬性和方法的運算, watch/event 事件回調。然而,掛載階段還沒開始,$el 屬性目前不可見。
//在剛進入頁面的時候,會觸發該函數的方法。只在頁面剛開始加載時執行一次。
mounted
el 被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子。如果 root 實例掛載了一個文檔內元素,當 mounted 被調用時 vm.$el 也在文檔內。
該鉤子在服務器端渲染期間不被調用。
//頁面已經完成會執行該函數。
activated
keep-alive 組件激活時調用。
該鉤子在服務器端渲染期間不被調用。
//當頁面存在緩存的時候執行該函數。
deactivated
keep-alive 組件停用時調用。
該鉤子在服務器端渲染期間不被調用。
//在頁面結束時觸發該方法,可清除掉滾動方法等緩存。
本文轉載自:https://blog.csdn.net/stubbor/article/details/73739765

轉載于:https://www.cnblogs.com/kelly-sunshine/p/10764430.html

總結

以上是生活随笔為你收集整理的vue缓存页面【二】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 女人舌吻男人茎视频 | 久久久三级视频 | 在线观看黄网 | 亚洲少妇15p | 奇米影视第四色777 波多野结衣一区二区三区免费视频 | 91中文字幕在线观看 | 99精品区| 国产乡下妇女做爰 | 天天爽夜夜爽一区二区三区 | 欧美透逼视频 | 国产麻豆91视频 | 精品成人av一区二区在线播放 | www..99热 | 日韩视频中文字幕 | 茄子视频A | 亚洲福利一区 | 可以免费看污视频的网站 | 国产日韩欧美在线观看视频 | 姐姐的秘密韩剧免费观看全集中文 | 91福利在线观看视频 | 欧美日韩xxx | 国产精品自拍网站 | 一区二区三区在线观看 | www中文在线 | 阿v天堂在线 | 欧美h在线观看 | 女的被男的操 | 天天爱夜夜操 | 亚洲理论电影在线观看 | 少妇与公做了夜伦理 | 在线观看av网站 | 级毛片内射视频 | 中文字幕91爱爱 | 理想之城连续剧40集免费播放 | 欧美精品久久久久久 | 亚洲爆乳无码精品aaa片蜜桃 | 国产无遮挡a片又黄又爽 | 海角社区id | 初音未来打屁股 | 免费久草视频 | av中文天堂在线 | 综合视频| 91精品免费观看 | 无码日本精品xxxxxxxxx | 91丨九色丨海角社区 | 亚洲一区人妻 | 丝袜老师办公室里做好紧好爽 | 又粗又猛又爽又黄的视频 | 美女高潮黄又色高清视频免费 | 亚洲精品视频导航 | 在线岛国 | 成人激情五月天 | 亚洲成人av电影网站 | 欧美在线看片 | 久久久精品影视 | 久久久久国产精品视频 | 亚洲天堂最新 | 亚洲欧美偷拍视频 | 一区二区三区在线观看视频 | ts人妖另类精品视频系列 | 色香蕉在线视频 | 国产高清久久 | 日本高清不卡在线 | 网友自拍咪咪爱 | 亚洲a成人 | 欧美日韩在线视频播放 | 日日夜夜中文字幕 | 成年人黄色一级片 | 国产高清精品在线观看 | 老熟妻内射精品一区 | 91久热| 裸体美女免费视频网站 | 免费精品视频在线观看 | 色涩涩 | 日韩精品一区二区在线视频 | 亚洲黄色在线网站 | 丰满少妇一级 | 黄色精彩视频 | 亚洲精品国产精品乱码在线观看 | 亚洲欧美第一页 | 韩国三级hd中文字幕叫床浴室 | 对白超刺激精彩粗话av | 国产激情小视频 | 欧美一级色片 | 精品国产乱码一区二区三 | 丝袜诱惑一区二区 | 日韩视频免费观看 | 男人的天堂影院 | 午夜黄色影院 | 日韩黄色在线视频 | 国产欧美在线观看视频 | 亚洲熟悉妇女xxx妇女av | 久久久久玖玖 | 美女天天操 | 成都免费高清电影 | 欧美成人一区二区 | 蜜桃视频污在线观看 | 国产亚洲色婷婷久久 | 91大尺度 |