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 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
vue 递归组件的简单使用示例
Jan 14 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
vue脚手架项目创建步骤详解
Mar 02 Vue.js
Vue多选列表组件深入详解
Mar 02 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
php实现通过ftp上传文件
2015/06/19 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
jQuery中animate的几种用法与注意事项
2016/12/12 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
python 图片验证码代码分享
2012/07/04 Python
使用python实现rsa算法代码
2016/02/17 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
料理师求职信
2014/01/30 职场文书
企业标语口号
2014/06/10 职场文书
2015年学校信息技术工作总结
2015/05/25 职场文书
联村联户简报
2015/07/21 职场文书
早恋主题班会
2015/08/14 职场文书
总经理聘用协议书
2015/09/21 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
2022微信温控新功能上线
2022/05/09 数码科技
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技