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 +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
Vue组件简易模拟实现购物车
Dec 21 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
vue 实现上传组件
May 31 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue使用watch监听属性变化
Apr 30 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
大师制作的中短波矿石收音机
2020/04/02 无线电
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
前端设计师们最常用的JS代码汇总
2016/09/25 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python关键字and和or用法实例
2015/05/28 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python实现人民币大写转换
2018/06/20 Python
Python 函数list&read&seek详解
2019/08/28 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
函授毕业自我鉴定
2013/12/19 职场文书
集团薪酬管理制度
2014/01/13 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
幼儿园安全生产月活动总结
2014/07/05 职场文书
涨价通知怎么写
2015/04/23 职场文书
行政二审代理词
2015/05/25 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
详解MySQL 联合查询优化机制
2021/05/10 MySQL
Java并发编程之Executor接口的使用
2021/06/21 Java/Android