keepalive 跳转到某个页面缓存 否则不缓存 缓存浏览的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | export const KeepaliveListMixin = { /** * 两个路由守卫 实现 从详情返回到列表 列表页面缓存 否则就不缓存 */ beforeRouteEnter (to, from, next) { to.meta.keepAlive = true ; next() }, beforeRouteLeave (to, from, next) { if (to.name == "DetailStore" ) { //这里的路径是要跳转的需要缓存的路径 from.meta.keepAlive = true ; } else { let Vnode = this .$vnode; let parentVnode = Vnode && Vnode.parent; if (parentVnode && parentVnode.componentInstance && parentVnode.componentInstance.cache) { var key = Vnode.key == null ? Vnode.componentOptions.Ctor.cid + (Vnode.componentOptions.tag ? `::${Vnode.componentOptions.tag}` : '' ) : Vnode.key; var cache = parentVnode.componentInstance.cache; var keys = parentVnode.componentInstance.keys; if (cache[key]) { this .$destroy(); if (keys.length) { var index = keys.indexOf(key); if (index > -1) { keys.splice(index, 1); } } cache[key] = null ; } } } //记录离开时的位置 start //let position = document.documentElement.scrollTop || document.body.scrollTop //from.meta.savedPosition = position //记录离开时的位置 end next(); }, } |
封装到KeepaliveListMixin.js里面 然后在你需要缓存的页面里面引入;
import { KeepaliveListMixin } from '@/mixins/KeepaliveListMixin'
mixins: [KeepaliveListMixin],
缓存浏览的位置 要配合 在router.js 配入以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | const scrollBehavior = function scrollBehavior (to, from, savedPosition) { if (savedPosition) { return savedPosition; } else { return { x: 0, y: 0 } } //需要返回一个promise 否则滚动条的位置 和滚动条的值不一样 //return new Promise((resolve) => { //setTimeout(() => { // if (savedPosition ) { //return savedPosition // }else { // return { x: 0, y: 0 } // } //},0) // }) }; const router = new Router({ routes, scrollBehavior, }); |
以上就能实现 keepalive 跳转到详情页面 返回的时候能缓存 且 记录浏览的位置; 从其他页面进入该页面就不会缓存
有个问题: 就是记录浏览位置的时候 滚动条在偏上面 没啥问题; 当你把滚动条拉到中下位置的时候 返回上一页的时候 滚动条会从原来的位置刷一下到了底部; 具体还未找到问题的原因; 有知道的大佬可以评论区留言交流!!!!
尝试过用localstorage 记录位置; 配合 scrollBehavior 还是存在问题; 在
1 | if (savedPosition) {console.lo( "上次滚动的位置" +savedPosition) // 这个值是上次的位置值没错, 就是不知道为什么会突然刷一下到达底部, 关键问题是 滚动条在靠近顶部的时候是正常的;return savedPosition; }else { return { x: 0, y: 0 } } |
1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY