vue项目如何监听localStorage或sessionStorage的变化


Posted in Vue.js onJanuary 04, 2021

出现这个问题的起因:在一个VUE页面中,引入两个组件,A组件实现基础信息展示,B组件展示列表,我要通过A组件的一个按钮触发状态,然后B组件根据A组件触发的状态来做业务处理,首先想到的是把状态放在localStorage,接下去就是在B组件怎么监听A组件状态

解决方法:

1.首先在 main.js 中给 Vue.protorype 注册一个全局方法,然后创建一个 StorageEvent 方法,当我在执行sessionStorage.setItem(k, val) 的时候,初始化事件并派发事件。

/**
 * @description
 * @author (Set the text for this tag by adding docthis.authorName to your settings file.)
 * @date 2019-05-29
 * @param { number } type 1 localStorage 2 sessionStorage
 * @param { string } key 键
 * @param { string } data 要存储的数据
 * @returns 
 */
Vue.prototype.$addStorageEvent = function (type, key, data) {
  if (type === 1) {
    // 创建一个StorageEvent事件
    var newStorageEvent = document.createEvent('StorageEvent');
    const storage = {
      setItem: function (k, val) {
        localStorage.setItem(k, val);
        // 初始化创建的事件
        newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);
        // 派发对象
        window.dispatchEvent(newStorageEvent);
      }
    }
    return storage.setItem(key, data);
  } else {
    // 创建一个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, data);
  }
}

还有一个简单封装监听localStorage

2.在A组件中调用——写入缓存

this.$addStorageEvent(2, "user_info", data);

或者

this.resetSetItem('watchStorage', jsonObj);

3.在B组件中监听

window.addEventListener('setItem', (e) => {
   console.log(e);
});

或者

window.addEventListener('setItem', ()=> {
    this.newVal = sessionStorage.getItem('watchStorage');
    var data=JSON.parse(this.newVal)
     console.log(data)
})

以上就是vue 项目如何监听localStorage或sessionStorage的变化的详细内容,更多关于vue 项目监听localStorage或sessionStorage的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue实现广告栏上下滚动效果
Nov 26 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vuex的使用步骤
Jan 06 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
如何理解Vue前后端数据交互与显示
May 10 Vue.js
详解Vue的options
May 15 Vue.js
Vue的过滤器你真了解吗
Feb 24 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
详解Vue3使用axios的配置教程
Apr 29 Vue.js
手写Vue源码之数据劫持示例详解
Jan 04 #Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 #Vue.js
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 #Vue.js
vue中使用echarts的示例
Jan 03 #Vue.js
vue 动态生成拓扑图的示例
Jan 03 #Vue.js
Vue中强制组件重新渲染的正确方法
Jan 03 #Vue.js
vue中activated的用法
Jan 03 #Vue.js
You might like
php防注
2007/01/15 PHP
用header 发送cookie的php代码
2007/03/16 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
jquery 获取json数据实现代码
2009/04/27 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
用python中的matplotlib绘制方程图像代码
2019/11/21 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
django使用channels实现通信的示例
2020/10/19 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
建筑专业毕业生自荐信
2014/05/25 职场文书
成都人事代理协议书
2014/10/25 职场文书
在职证明书模板
2015/06/15 职场文书
2016见义勇为事迹材料汇总
2016/03/01 职场文书
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android