所有分类
  • 所有分类
  • 后端开发
Vue项目必备技能:保留页面状态的神器keep-alive大揭秘

Vue项目必备技能:保留页面状态的神器keep-alive大揭秘

vue项目,页面有搜索、筛选项等。页面跳转,切换或者刷新,希望可以记住用户在页面的筛选状态我们可以使用keep-alive包括路由组件,去缓存页面状态。但是,这样并不能满足刷新页面依旧可以记住页面状态的需求。因为刷新浏览器页面的时候,等于是

你们有没有试过这种情况?做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
   };
  }
 }
}

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/03/11453.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?