你们有没有试过这种情况?做Vue项目时,网页上肯定会有搜索框和筛选选项。但是,当你被稿子搞得心烦意乱地在这些地方不断跳跃或更新页面的时候,是不是想要保持那些繁琐筛选参数?那可咋整?
Vue有个叫keep-alive的东东,能留住组件不消失。我们用这个功能把路由组件包起来,就可以保留页面状态。不过注意,这只是个半成品。为啥这么说?因为如果你F5刷新页面的话,vue整体会重启,所有保存下来的数据也都没了。
好嘞,现在我们试试看方案V2!这个新方案主要就是修正了V1里面那个问题。为了让大家都能方便使用,也不会影响到原来的代码,我特意把这部分内容做成了一个混搭(mixin)。具体代码的样子,大概如下图所示:
记忆混合有啥好的?给大家分享哈。
内存参数,就用’你的那个关键字就是了’来表示然后开启内存参数功能,就这么简单。getMemoryParams这个方法,就是用来获取内存参数滴。
// 这里写获取缓存数据的方法 },
只要页面里有要缓存的数据,那就在页面里用这个 mixin 把内存参数的 key 和 getMemoryParams()函数改写一下,就是这样!
直接从@/mixins/memoryMixin里拿了内存混和的功能。
export default {
我们加入了内存混合功能,现在你可以得到这个结果:
在这儿写下你自己的数据,然后加点儿你自己觉得有意思的小功能。
这样一来,问题就解决!
// 定义一个混入对象 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;
还要告诉你们!方案v2也不能完全搞定问题,如果你把页面搞得很啰嗦地去做那些需要时间完成的动作(比如请求一下别的网站的东西),缓存下来的信息说不定就出状况了。所以,用v2时还是小心点儿!
先别着急离开这儿有个小贴士儿跟你们分享一下。记得用 keep-alive 或别的缓存策略时,得小心点别让页面上的信息过时或出错了。毕竟,咱得把用户体验放在第一位,不是吗?
老实说,咋能记住网页信息?方案v1显然不太行,而v2也有其不足。所以,选哪种,还是看具体情况要明白,以用户为主!好了,话不多说,今天就分享到这儿!希望我这篇小短文能帮到你们~ 要是还有啥问题或想法,别忘了留言告诉我!谢谢大家,记得帮忙点个赞,分享给你的朋友们
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 }; } } }
评论0