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

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

vue移動(dòng)端項(xiàng)目中如何實(shí)現(xiàn)頁(yè)面緩存的示例代碼

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

在移動(dòng)端中,頁(yè)面跳轉(zhuǎn)之間的緩存是必備的一個(gè)需求。

例如:首頁(yè)=>列表頁(yè)=>詳情頁(yè)。

從首頁(yè)進(jìn)入列表頁(yè),列表頁(yè)需要刷新,而從詳情頁(yè)返回列表頁(yè),列表頁(yè)則需要保持頁(yè)面緩存。

對(duì)于首頁(yè),一般我們都會(huì)讓其一直保持緩存的狀態(tài)。

對(duì)于詳情頁(yè),不管從哪個(gè)入口進(jìn)入,都會(huì)讓其重新刷新。

實(shí)現(xiàn)思路

說(shuō)到頁(yè)面緩存,在vue中那就不得不提keep-alive組件了,keep-alive提供了路由緩存功能,本文主要基于它和vuex來(lái)實(shí)現(xiàn)應(yīng)用里的頁(yè)面跳轉(zhuǎn)緩存。

vuex里維護(hù)一個(gè)數(shù)組cachePages,用以保存當(dāng)前需要緩存的頁(yè)面。keep-alive 的 includes 設(shè)置為cachePages。路由meta添加自定義字段 needCachePages或keepAlive,needCachePages 為一個(gè)數(shù)組,表示該路由要進(jìn)入的頁(yè)面如果在數(shù)組內(nèi),則緩存該路由,keepAlive則表示無(wú)論進(jìn)入哪個(gè)頁(yè)面都保持緩存,如app首頁(yè)這種。在路由守衛(wèi)beforeEach里判斷,如果要跳轉(zhuǎn)的路由頁(yè)面在當(dāng)前路由的needCachePages里,則當(dāng)前路由添加進(jìn)cachePages里,反之刪除。

具體實(shí)現(xiàn)

vuex實(shí)現(xiàn)內(nèi)容

// src/store/modules/app.jsexport default { state: { // 頁(yè)面緩存數(shù)組 cachePages: [] }, mutations: { // 添加緩存頁(yè)面 ADD_CACHE_PAGE(state, page) { if (!state.cachePages.includes(page)) { state.cachePages.push(page) } }, // 刪除緩存頁(yè)面 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’// 導(dǎo)出 store 對(duì)象export default new Vuex.Store({ getters, modules: { user, app }})

App.vue里,keep-alive的include設(shè)置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: ’首頁(yè)’, keepAlive: true }},{ path: ’/list’, name: ’List’, component: () => import(’@/views/List’), meta: { title: ’列表頁(yè)’, needCachePages: [’ListDetail’] }},{ path: ’/list-detail’, name: ’ListDetail’, component: () => import(’@/views/Detail’), meta: { title: ’詳情頁(yè)’ }}

路由守衛(wèi)

import Vue from ’vue’import Router from ’vue-router’import store from ’@/store’Vue.use(Router)// 導(dǎo)入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)})// 全局路由守衛(wèi)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) } // 出現(xiàn)頁(yè)面首次緩存失效的情況,猜測(cè)是vuex到keep-alive緩存有延遲的原因 //這里使用延遲100毫秒解決 setTimeout(() => { next() }, 100)})export default router還原頁(yè)面滾動(dòng)條位置

此時(shí)雖然頁(yè)面實(shí)現(xiàn)緩存了,但滾動(dòng)條每次都會(huì)重新回到頂部。

對(duì)于緩存的頁(yè)面,會(huì)觸發(fā)activated和deactivated這兩個(gè)鉤子,可以利用這兩個(gè)鉤子來(lái)實(shí)現(xiàn)還原滾動(dòng)條位置。

在頁(yè)面離開(kāi)時(shí),也就是deactivated觸發(fā)時(shí)記錄滾動(dòng)條位置。

在重新回到頁(yè)面時(shí),也就是activated觸發(fā)時(shí)還原滾動(dòng)條位置。

// 創(chuàng)建一個(gè)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() } }}

這里發(fā)現(xiàn)使用deactivated時(shí)會(huì)因?yàn)轫?yè)面隱藏過(guò)快會(huì)導(dǎo)致獲取的節(jié)點(diǎn)滾動(dòng)條高度為0,所以用beforeRouteLeave。

在需要緩存的頁(yè)面中使用

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

如果頁(yè)面自定義了滾動(dòng)容器,此時(shí)可以傳入滾動(dòng)容器id

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

我的小伙伴經(jīng)常會(huì)來(lái)問(wèn)我一個(gè)問(wèn)題,為什么我配置了卻沒(méi)有緩存的效果?

這個(gè)時(shí)候你就需要注意一個(gè)問(wèn)題了,keep-alive的一個(gè)關(guān)鍵是路由里的name要和.vue文件里的name保持一致。

如果你的緩存沒(méi)有生效,請(qǐng)首先檢查一下兩個(gè)name和needCachePages里是否一致。

思考與不足

此方案是我一年多前的做法,現(xiàn)在想來(lái)其實(shí)還是存在一些不足的,比如每次都需要去配置路由里的needCachePages。

而實(shí)際上在移動(dòng)端中,往往都是在返回上一頁(yè)時(shí),上一頁(yè)始終保持緩存的狀態(tài),就如開(kāi)發(fā)小程序時(shí)一樣,當(dāng)我們調(diào)用navigateTo后再返回,頁(yè)面始終是緩存的并不需要任何人為的配置。

所以現(xiàn)在的想法是,在vue中提供一個(gè)全局的跳轉(zhuǎn)api,只要調(diào)用該api就把當(dāng)前頁(yè)面緩存,如果需要刷新操作,可以像小程序里的onShow一樣在activated里執(zhí)行你的邏輯。

到此這篇關(guān)于vue移動(dòng)端項(xiàng)目中如何實(shí)現(xiàn)頁(yè)面緩存的示例代碼的文章就介紹到這了,更多相關(guān)vue 頁(yè)面緩存內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美女精品一区| 卡一卡二国产精品| 国产精品久久久久蜜臀| 亚洲日本国产| 日本国产亚洲| 久久精品国产在热久久| 91一区二区三区四区| 999国产精品999久久久久久| 日韩一级网站| 日韩精品成人| 久久久久亚洲精品中文字幕| 日韩精品第一区| 黄色在线一区| 欧美日韩调教| 亚洲伦乱视频| 喷白浆一区二区| 欧美亚洲免费| 播放一区二区| 亚洲欧美不卡| 免费视频一区二区三区在线观看 | 久久免费影院| 亚洲一区欧美二区| 国产精品极品在线观看| 免费高潮视频95在线观看网站| 午夜精品网站| 国产情侣久久| 婷婷国产精品| 国产日韩欧美高清免费| 一本大道色婷婷在线| 亚洲午夜国产成人| 91一区二区| 免费看黄色91| 97精品国产| 青草av.久久免费一区| 亚洲va中文在线播放免费| 一区二区三区四区在线观看国产日韩| 久久一区精品| 久久亚洲欧美| 天堂√中文最新版在线| 日韩欧美在线精品| 久久婷婷亚洲| 国产精品羞羞答答在线观看| 国产精品99免费看| 国产精品99久久免费观看| 欧美在线亚洲| 国产在线观看91一区二区三区| 国产精品88久久久久久| 国产九九精品| 亚洲欧美日韩专区| 超碰超碰人人人人精品| 日韩精品亚洲aⅴ在线影院| 日韩久久电影| 国产精品一区二区三区av麻| 国产日本久久| 视频一区二区三区入口| 日韩欧美二区| 欧美激情在线精品一区二区三区| 午夜欧美理论片| 亚洲综合电影| 国产精品亚洲产品| 亚洲精品美女91| 婷婷激情一区| 国产一区二区三区视频在线| 日韩1区2区3区| 亚洲综合国产| 久久亚洲国产| 成人日韩在线| 精品视频免费| 国产剧情在线观看一区| 亚洲图片久久| 视频一区二区中文字幕| 国产综合亚洲精品一区二| 福利一区和二区| 麻豆91精品视频| 国产乱码精品一区二区三区四区 | 性欧美xxxx免费岛国不卡电影| 久久精品国产福利| 国产精品天天看天天狠| 欧美日韩1区2区3区| 石原莉奈在线亚洲二区| 欧美特黄a级高清免费大片a级| 欧美男人天堂| 国产资源在线观看入口av| 麻豆精品久久| 久久亚洲黄色| 欧美国产一级| 色婷婷综合网| 日韩中文影院| 欧美搞黄网站| 激情五月综合网| 麻豆精品蜜桃| 91精品精品| 激情欧美丁香| 亚洲综合日韩| 亚洲一区二区av| 日本在线不卡视频一二三区| 最新国产精品视频| 日韩精品视频网| 国产欧美精品| 福利一区二区免费视频| 黄色aa久久| 免费av一区| 麻豆91精品| 日本aⅴ亚洲精品中文乱码| 91欧美极品| 国产免费av一区二区三区| 免费在线亚洲| 一本大道色婷婷在线| 欧美特黄一级大片| 美女国产精品| 欧美亚洲网站| 岛国av免费在线观看| 日韩一区电影| 国产精品普通话对白| 日韩欧美久久| 久久精品国产免费| 成人日韩在线| 中文一区一区三区免费在线观 | 蜜桃一区二区三区在线| 亚洲天堂日韩在线| 国产精品视频一区二区三区综合 | 日韩成人a**站| 欧美日韩国产高清电影| 国产精品毛片在线| 欧美天堂在线| 欧美天堂视频| 水野朝阳av一区二区三区| 国产亚洲精品精品国产亚洲综合| 精品日本视频| 不卡中文一二三区| 国产日韩欧美三级| 久久精品不卡| 日韩av午夜在线观看| 亚洲啊v在线| 亚洲免费福利一区| 日韩欧美二区| 人人爱人人干婷婷丁香亚洲| 日韩电影二区| 日本不卡视频一二三区| 日韩欧美午夜| 日本成人在线网站| 香蕉成人av| 欧美日本精品| 欧美在线资源| 国产日韩欧美在线播放不卡| 日韩在线高清| 日韩精品免费视频人成| 日韩大片免费观看| 日韩不卡在线观看日韩不卡视频| 日本а中文在线天堂| 日本aⅴ精品一区二区三区| а√天堂8资源中文在线| 免费一区二区视频| 黑人精品一区| 清纯唯美亚洲综合一区| 国产中文一区| 精品一区二区三区四区五区| 亚洲最大av| 亚洲大片在线| 日韩欧美少妇| 免费在线播放第一区高清av| 热久久免费视频| 亚洲精品国产嫩草在线观看| 欧美日一区二区在线观看| 在线一区免费| 日韩一区二区中文| 国产精品探花在线观看| 蜜桃av一区二区| 欧美99久久| 九九精品调教| 精品一区二区三区在线观看视频 | 四虎成人av| 欧美日韩一区二区三区在线电影| 午夜欧美精品| 91精品国产成人观看| 精品视频在线一区二区在线| 日日摸夜夜添夜夜添国产精品| 香蕉成人av| 四虎国产精品免费观看| 欧美一区影院| 中文字幕日韩亚洲| 欧美 日韩 国产一区二区在线视频| 美女av一区| 91欧美精品| 亚洲精品乱码| 亚洲欧洲午夜| 日韩国产一区二区三区| 国产精品videossex久久发布| 蜜桃久久久久久| 亚洲欧美日韩国产一区| 亚洲特色特黄| 免费观看久久av| 99精品在线观看| 日韩一区二区三区免费| 98精品视频| 午夜av不卡| 久久久久国产| 蜜桃一区二区三区| 一本一道久久a久久精品蜜桃| 久久网站免费观看|