日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

vue移動端項目中如何實現頁面緩存的示例代碼

瀏覽:24日期:2022-09-30 18:50:27
背景

在移動端中,頁面跳轉之間的緩存是必備的一個需求。

例如:首頁=>列表頁=>詳情頁。

從首頁進入列表頁,列表頁需要刷新,而從詳情頁返回列表頁,列表頁則需要保持頁面緩存。

對于首頁,一般我們都會讓其一直保持緩存的狀態。

對于詳情頁,不管從哪個入口進入,都會讓其重新刷新。

實現思路

說到頁面緩存,在vue中那就不得不提keep-alive組件了,keep-alive提供了路由緩存功能,本文主要基于它和vuex來實現應用里的頁面跳轉緩存。

vuex里維護一個數組cachePages,用以保存當前需要緩存的頁面。keep-alive 的 includes 設置為cachePages。路由meta添加自定義字段 needCachePages或keepAlive,needCachePages 為一個數組,表示該路由要進入的頁面如果在數組內,則緩存該路由,keepAlive則表示無論進入哪個頁面都保持緩存,如app首頁這種。在路由守衛beforeEach里判斷,如果要跳轉的路由頁面在當前路由的needCachePages里,則當前路由添加進cachePages里,反之刪除。

具體實現

vuex實現內容

// src/store/modules/app.jsexport default { state: { // 頁面緩存數組 cachePages: [] }, mutations: { // 添加緩存頁面 ADD_CACHE_PAGE(state, page) { if (!state.cachePages.includes(page)) { state.cachePages.push(page) } }, // 刪除緩存頁面 REMOVE_CACHE_PAGE(state, page) { if (state.cachePages.includes(page)) { state.cachePages.splice(state.cachePages.indexOf(page), 1) } } }}

// src/store/getters.jsconst getters = { cachePages: state => state.app.cachePages}export default getters

// src/store/index.jsimport Vue from ’vue’import Vuex from ’vuex’Vue.use(Vuex)import user from ’./modules/user’import app from ’./modules/app’import getters from ’./getters’// 導出 store 對象export default new Vuex.Store({ getters, modules: { user, app }})

App.vue里,keep-alive的include設置cachePages

<keep-alive :include='cachePages'> <router-view :key='$route.fullPath'></router-view></keep-alive>computed: { ...mapGetters([ ’cachePages’ ])}

路由配置

{ path: ’/home’, name: ’Home’, component: () => import(’@/views/tabbar/Home’), meta: { title: ’首頁’, keepAlive: true }},{ path: ’/list’, name: ’List’, component: () => import(’@/views/List’), meta: { title: ’列表頁’, needCachePages: [’ListDetail’] }},{ path: ’/list-detail’, name: ’ListDetail’, component: () => import(’@/views/Detail’), meta: { title: ’詳情頁’ }}

路由守衛

import Vue from ’vue’import Router from ’vue-router’import store from ’@/store’Vue.use(Router)// 導入modules文件夾里的所有路由const files = require.context(’./modules’, false, /.js$/)let modules = []files.keys().forEach(key => { modules = modules.concat(files(key).default)})// 路由const routes = [ { path: ’/’, redirect: ’/home’, }, ...modules]const router = new Router({ mode: ’hash’, routes: routes})function isKeepAlive(route) { if (route.meta && route.meta.keepAlive) { store.commit(’ADD_CACHE_PAGE’, route.name) } if (route.children) { route.children.forEach(child => { isKeepAlive(child) }) }}routes.forEach(item => { isKeepAlive(item)})// 全局路由守衛router.beforeEach((to, from, next) => { if (from.meta.needCachePages && from.meta.needCachePages.includes(to.name)) { store.commit(’ADD_CACHE_PAGE’, from.name) } else if (from.meta.needCachePages) { store.commit(’REMOVE_CACHE_PAGE’, from.name) } // 出現頁面首次緩存失效的情況,猜測是vuex到keep-alive緩存有延遲的原因 //這里使用延遲100毫秒解決 setTimeout(() => { next() }, 100)})export default router還原頁面滾動條位置

此時雖然頁面實現緩存了,但滾動條每次都會重新回到頂部。

對于緩存的頁面,會觸發activated和deactivated這兩個鉤子,可以利用這兩個鉤子來實現還原滾動條位置。

在頁面離開時,也就是deactivated觸發時記錄滾動條位置。

在重新回到頁面時,也就是activated觸發時還原滾動條位置。

// 創建一個mixin// src/mixins/index.jsexport const savePosition = (scrollId = ’app’) => { return { data() { return { myScrollTop: 0 } }, activated() { const target = document.getElementById(scrollId) target && target.scrollTop = this.myScrollTop }, beforeRouteLeave(to, from, next) { const target = document.getElementById(scrollId) this.myScrollTop = target.scrollTop || 0 next() } }}

這里發現使用deactivated時會因為頁面隱藏過快會導致獲取的節點滾動條高度為0,所以用beforeRouteLeave。

在需要緩存的頁面中使用

<script>import { savePosition } from ’@/mixins’export default { mixins: [new savePosition()]}</script>

如果頁面自定義了滾動容器,此時可以傳入滾動容器id

<template> <div style='height: 100vh; overflow-y: scroll;'> </div></template><script>import { savePosition } from ’@/mixins’export default { mixins: [new savePosition(’scroll-container’)]}</script>注意

我的小伙伴經常會來問我一個問題,為什么我配置了卻沒有緩存的效果?

這個時候你就需要注意一個問題了,keep-alive的一個關鍵是路由里的name要和.vue文件里的name保持一致。

如果你的緩存沒有生效,請首先檢查一下兩個name和needCachePages里是否一致。

思考與不足

此方案是我一年多前的做法,現在想來其實還是存在一些不足的,比如每次都需要去配置路由里的needCachePages。

而實際上在移動端中,往往都是在返回上一頁時,上一頁始終保持緩存的狀態,就如開發小程序時一樣,當我們調用navigateTo后再返回,頁面始終是緩存的并不需要任何人為的配置。

所以現在的想法是,在vue中提供一個全局的跳轉api,只要調用該api就把當前頁面緩存,如果需要刷新操作,可以像小程序里的onShow一樣在activated里執行你的邏輯。

到此這篇關于vue移動端項目中如何實現頁面緩存的示例代碼的文章就介紹到這了,更多相關vue 頁面緩存內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产亚洲精品v| 国产免费av国片精品草莓男男| 精品国产欧美日韩| 国产欧美精品| 国产精品一区二区三区四区在线观看 | 伊人影院久久| 伊人久久亚洲影院| 久久久久久久久久久9不雅视频| 日韩在线精品| se01亚洲视频 | 伊人久久婷婷| 中文无码久久精品| 青青草伊人久久| 国产精品magnet| 精品日本视频| 97精品97| 亚洲自啪免费| 日韩av在线免费观看不卡| 欧美一区精品| 丰满少妇一区| 激情欧美一区| 亚洲精品伊人| 免费精品一区| 99国产精品免费视频观看| 好看的亚洲午夜视频在线| 亚洲自拍另类| 国产精品欧美在线观看| 国产精品国产三级国产在线观看| 群体交乱之放荡娇妻一区二区| 亚洲精品.com| 最新国产精品久久久| 国产精品入口久久| 播放一区二区| 午夜精品影视国产一区在线麻豆| 国产精品99久久免费观看| 私拍精品福利视频在线一区| 国产婷婷精品| 国产精品大片| 欧美一区二区三区高清视频| 蜜桃视频第一区免费观看| 久久wwww| 尤物tv在线精品| 亚洲va久久久噜噜噜久久| 国产福利一区二区精品秒拍 | 国产一区二区三区日韩精品| 91精品亚洲| 日韩精品a在线观看91| 岛国精品一区| 一区二区91| 欧美国产美女| 亚洲免费资源| 一区二区三区四区日本视频| 国产免费成人| 久久午夜影院| 亚洲激精日韩激精欧美精品| 亚洲精品免费观看| 日韩精品中文字幕第1页| 综合激情网站| 欧美日韩免费观看视频| 日韩欧美2区| 久久中文亚洲字幕| 国产亚洲电影| 欧美午夜不卡| 韩日一区二区| 中文一区一区三区免费在线观| 久久男人av| 亚洲精品激情| 99精品电影| 精品视频久久| 亚洲a成人v| 精品免费av在线| 国产精品igao视频网网址不卡日韩| 亚洲一区二区成人| 蜜臀久久精品| 国产精品色在线网站| 亚洲一区观看| 91精品韩国| 美女尤物国产一区| 亚洲精品精选| 国产精品7m凸凹视频分类| 久久精品国产在热久久| 亚洲18在线| 影院欧美亚洲| 欧美日韩在线播放视频| 成人在线视频免费| 中文字幕一区二区三区四区久久| 欧洲精品一区二区三区| 你懂的网址国产 欧美| 亚洲色图网站| 91精品99| 国产亚洲一区二区手机在线观看| 欧美精品aa| 亚洲精品成a人ⅴ香蕉片| 黑丝一区二区三区| 91精品一区二区三区综合在线爱| 久久精品色播| 国产麻豆精品| 日韩精品免费一区二区夜夜嗨| 亚洲一级在线| 欧美日韩国产一区精品一区| 欧美久久天堂| 成人免费一区| 国产在视频一区二区三区吞精| 国产精品亚洲综合久久| 日韩欧美中文字幕一区二区三区| 国产麻豆综合| 免费日韩一区二区| 一区视频在线| 欧美日韩国产综合网| 精品一区免费| 免费欧美一区| 亚洲精品一区二区妖精| 久久国产日韩| 日韩黄色大片网站| 亚洲综合在线电影| 日韩av自拍| 成人一区而且| 国产一区二区精品福利地址| 欧美激情网址| 麻豆精品久久| 免费在线欧美黄色| 久久精品国产福利| 国产成人免费精品| av资源中文在线| 中文字幕高清在线播放| 国产成人精品999在线观看| 成人综合一区| 亚洲www啪成人一区二区| 99久久精品费精品国产| 99成人超碰| 午夜精品成人av| 久久国产主播| 国产亚洲福利| 亚洲影视一区二区三区| 日韩一区精品| 欧美一区精品| 国产在视频一区二区三区吞精| 亚洲风情在线资源| 久久精品av| 国产精品毛片在线看| 一区二区三区四区在线观看国产日韩| 日本不卡不码高清免费观看 | 亚洲最新av| 久久国产精品免费一区二区三区| 免费日韩av| 日本在线成人| 国产精品a级| 日韩一区三区| 在线亚洲一区| 日韩 欧美一区二区三区| 久久av网站| 日韩成人亚洲| 亚洲涩涩av| 久久99偷拍| 日韩精品一区二区三区免费观看| 午夜久久影院| 青青草国产成人99久久| 精品久久影院| 婷婷亚洲五月| 黄页网站一区| 欧美午夜三级| 日韩在线观看| 三级在线观看一区二区| 国产亚洲久久| 秋霞国产精品| 涩涩涩久久久成人精品| 久久香蕉网站| 99精品一区| 日本中文字幕一区二区视频 | 日韩成人亚洲| 亚洲精品大片| 国产精品成人a在线观看| 日韩精品首页| 日韩精品高清不卡| 欧美www视频在线观看| 日韩视频一区| 国产精品黄色片| 久久国产电影| 日韩精品亚洲aⅴ在线影院| 成人在线免费观看网站| 亚洲欧美视频| 国产一区二区三区亚洲综合| 好吊日精品视频| 国产欧美高清视频在线| 久久国产中文字幕| 久久精品超碰| 极品裸体白嫩激情啪啪国产精品| 国产亚洲在线| 精品视频网站| 亚洲欧洲专区| 久久视频精品| 国产精品s色| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品国产一区二区三区性色av| 尤物在线精品| 国产 日韩 欧美一区| 国产三级精品三级在线观看国产| 亚洲欧美一区在线| 福利一区二区三区视频在线观看| 一区二区三区四区日韩|