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中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
Vue-router中hash模式与history模式的区别详解
Dec 15 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
Vue详细的入门笔记
May 10 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
vue的项目如何打包上线
Apr 13 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
vue如何在data中引入图片的正确路径
Jun 05 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编码规范之注释和文件结构说明
2010/07/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
js直接编辑当前cookie的脚本
2008/09/14 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
通过jquery.cookie.js实现记住用户名、密码登录功能
2018/06/20 jQuery
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
python使用tkinter实现简单计算器
2018/01/30 Python
如何用python整理附件
2018/05/13 Python
python3.4实现邮件发送功能
2018/05/28 Python
python 表格打印代码实例解析
2019/10/12 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
几道PHP面试题
2013/04/14 面试题
公司开会通知
2015/04/20 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
Rust中的Struct使用示例详解
2022/08/14 Javascript