首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >前端开发--记录VUE中监听sessionStorage变化

前端开发--记录VUE中监听sessionStorage变化

作者头像
玖柒的小窝
修改2021-11-08 14:03:03
修改2021-11-08 14:03:03
2.7K0
举报
文章被收录于专栏:各类技术文章~各类技术文章~

1、背景

前段时间项目上有个需求,在菜单栏进行切换应用的时候,页面的数据要进行刷新。如下图所示:

当点击切换顶部的菜单后,下面的内容区域的数据进行刷新。

目前菜单栏的信息我是通过sessionStorage存储到本地的,于是想着如果可以监听sessionStorage的变化, 那么我根据变化去加载页面的数据效果会好很多。

当然了刷新页面也有其它的做法,比如整个页面进行刷新relaod,但是效果太差了。

2、实现

2.1 在main.js中添加全局获取缓存数据

代码语言:javascript
复制
// 全局获取缓存数据
Vue.prototype.resetSetItem = function (key, newVal) {
  if (key === 'menuItem') {
    // 创建一个StorageEvent事件
    var newStorageEvent = document.createEvent('StorageEvent');
    const storage = {
      setItem: function (k, val) {
        sessionStorage.setItem(k, val);

        // 初始化创建的事件
        newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);

        // 派发对象
        window.dispatchEvent(newStorageEvent)
      }
    }
    return storage.setItem(key, newVal);
  }
},
复制代码

根据自己的需求去设置 "key"

2.2在需要保存数据的地方进行调用

如上图所示,在切换菜单的时候对选中的菜单数据进行保存。

代码语言:javascript
复制
 this.resetSetItem("menuItem", JSON.stringify(keyPath));
复制代码

2.3在需要获取选中菜单数据的地方进行sessionStorage变化监听

代码语言:javascript
复制
<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
    <label>{{ chooseValue }}</label>
    <router-link :to="{ name: 'HelloWorldTwo' }">jump </router-link>
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  data() {
    return {
      msg: "Hello World One",
      chooseValue: "",
    };
  },
  mounted() {
    window.addEventListener("setItem", this.printLog);
  },
  //页面销毁
  beforeDestroy() {
    window.removeEventListener("setItem", this.printLog);
  },
  methods: {
    printLog() {
      console.log("监听到数据变化");
      this.chooseValue = sessionStorage.getItem("menuItem");
    },
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
复制代码

mounted:页面创建的时候添加监听

beforeDestroy: 在页面销毁的时候移除监听

通过上面三步就可以实现监听sessionStorage的变化了。

3 操作效果图

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、背景
  • 2、实现
    • 2.1 在main.js中添加全局获取缓存数据
    • 2.2在需要保存数据的地方进行调用
    • 2.3在需要获取选中菜单数据的地方进行sessionStorage变化监听
  • 3 操作效果图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档