环境
vue项目,页面有搜索、筛选项等。
需求
页面跳转,切换或者刷新,希望可以记住用户在页面的筛选状态
方案v1
vue有提供一种缓存组件的解决方案 — keep-alive。
缓存不活动的组件实例,而不是销毁它们。
<keep-alive> <router-view v-if="$route.meta.keepAlive" class="app-middle-content"/> </keep-alive> <router-view v-if="!$route.meta.keepAlive" class="app-middle-content"/>
我们可以使用keep-alive包括路由组件,去缓存页面状态。
但是,这样并不能满足刷新页面依旧可以记住页面状态的需求。因为刷新浏览器页面的时候,等于是刷新了整个vue实例应用,所有vue缓存的数据都会丢失。
方案v2
基于方案1的缺陷,衍生出了方案v2
- 为了满足刷新页面依然能够记住页面状态,我们需要把页面状态做持久化处理
- 在localStorage, sessionStorage, cookie三种方案中,我选择了sessionStorage
- 然后只需要,在页面刷新或者销毁之前,记录页面需要记住的参数。然后在页面加载的时候读取之前存储的参数。
为了可复用和尽量小的代码侵入性。我把相关代码封装成了一个mixin,代码如下:
// 定义一个混入对象 let paramsMemoryMixin = { data () { return { // 记住参数存储的key, 请在引用该mixin的组件中重写 memoryParamsKey: 'nb-memory-params' } }, created: function () { this.initParams(); // 在页面刷新时将筛选信息保存到sessionStorage里 window.addEventListener('beforeunload', this.onPageUnload); }, methods: { initParams () { let userParams = JSON.parse(sessionStorage.getItem(this.memoryParamsKey)); for (let key in userParams) { this[key] = userParams[key]; } }, onPageUnload () { sessionStorage.setItem(this.memoryParamsKey, JSON.stringify(this.getMemoryParams())); }, /** * 需要记住的页面参数 * @return { key: value } */ getMemoryParams () { throw Error('请重写paramsMemoryMixin的getMemoryParams方法'); } }, beforeDestroy () { window.removeEventListener('beforeunload', this.onPageUnload); }, beforeRouteLeave (to, from, next) { this.onPageUnload(); next(); } }; export default paramsMemoryMixin;
然后,在需要缓存的页面,引入该mixin,并重写存储参数的键名: memoryParamsKey 和获取缓存数据的方法 getMemoryParams () 。例如:
import memoryMixin from '文件路径/params-memory-mixin.js'; export default { mixins: [ memoryMixin ], data () { return { // 记住参数存储的key memoryParamsKey: 'xx-xx-params' } }, methods: { getMemoryParams () { return { key1: this.value1, key2: this.value2, key3: this.value3 }; } } }
至此,问题解决。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
2024年09月21日
2024年09月21日
- 玩家分享《黑神话:悟空》大怨种:想痛快玩游戏花了快400块
- 作者回应《黑神话》墙绘被毁:当地相关部门支持重绘
- 李泉.1995-上海梦【魔岩】【WAV+CUE】
- 何雨雯.1994-给你的歌【天王唱片】【WAV+CUE】
- 群星.1994-神摇第一章·极乐扬州路【D.I.Y】【WAV+CUE】
- 《车烧友 发烧情歌天碟3CD》[WAV/分轨][1.9GB]
- 《薛之谦 情歌不变招牌 霸气情歌2CD》[WAV/分轨][1.2GB]
- 《刘若英 滚石SACD精选》[ISO][1GB]
- 仙境传说新启航牧师怎么加点 牧师属性技能加点推荐
- 仙境传说新启航舞娘怎么加点 舞娘属性技能加点推荐
- 魔兽世界祖尔格拉布在哪 魔兽世界祖尔格拉布位置介绍
- 群星《名列前茅五大顶级发烧男声》2CD[DTS-WAV]
- 群星《经典再现·国语女声》2CD[DTS-WAV]
- 群星《十大民歌天后》2CD[DTS-WAV分轨]
- 《黑神话:悟空》浮屠牢是最糟糕的部分:但也是做得最好的