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 的 v-model用法实例
Nov 23 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
Vue+penlayers实现多边形绘制及展示
Dec 24 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
vue实现拖拽进度条
Mar 01 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue如何清除浏览器历史栈
May 25 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
PDO的安全处理与事物处理方法
2016/10/31 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
js 可拖动列表实现代码
2011/12/13 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
详解js创建对象的几种方法及继承
2019/04/12 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
Europcar比利时:租车
2019/08/26 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
陈欧的广告词
2014/03/18 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
教师节倡议书2015
2015/04/27 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
投诉书范文
2015/07/02 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
python 对图片进行简单的处理
2021/06/23 Python
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis