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 router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
详细聊聊vue中组件的props属性
Nov 02 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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
网页中CDATA标记的说明
2010/09/12 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
一看就懂得Python的math模块
2018/10/21 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
基于python实现雪花算法过程详解
2019/11/16 Python
python能否java成为主流语言吗
2020/06/22 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
什么是就业协议书
2014/04/17 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
文秘自荐信
2014/06/28 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
销售辞职信范文
2015/03/02 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技