首页 > 其他分享 >自定义localStorage监听事件

自定义localStorage监听事件

时间:2024-07-16 17:09:06浏览次数:13  
标签:自定义 app setItem dispatchEventStroage localStorage import 监听

一、问题

在项目开发过程中,发现有很多时候进行localStorage.setItem()操作设置本地存储后,页面必须刷新才能够获取到存储数据,而有些时候本地缓存更新后,页面无法通过再次刷新以获取本地缓存,这就导致依赖本地缓存的数据无法进行更新。为了解决这个问题,就必须要用到自定义localStorage监听事件了

二、解决方法

下面以Vue3项目为例进行自定义localStorage监听事件方法阐述。

首先,在根目录src目录下新建utils文件夹,在utils文件夹下新增overwrite.js文件,文件内容如下:

// overwrite.js

// 重写setItem事件,当使用setItem的时候,触发,window.dispatchEvent派发事件
export function dispatchEventStroage () {
    const signSetItem = localStorage.setItem
    localStorage.setItem = function (key, val) {
      let setEvent = new Event('setItemEvent')
      setEvent.key = key
      setEvent.newValue = val
      window.dispatchEvent(setEvent)
      signSetItem.apply(this, arguments)
    }
  }
  

接下来,在项目的入口文件main.js下引入自定义的重写方法

1、引入文件的方法

import {dispatchEventStroage} from "./utils/overwrite"

2、全局使用即可。

dispatchEventStroage()

3、完整main.js引入的示例,如有不清楚的地方请参考下面的完整main.js示例:

import {createApp} from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'
import {createPinia} from 'pinia'
import screenShort from "vue-web-screen-shot";
import {dispatchEventStroage} from "./utils/overwrite"

const app = createApp(App)

dispatchEventStroage()

app.use(router)
app.use(createPinia())
app.use(screenShort, {enableWebRtc: true})
app.mount('#app')

最后,在需要的地方使用即可,使用示例如下:

window.addEventListener('setItemEvent', (e) => {
      console.log("监听到触发了localStorage.setItem事件",e)
  })

标签:自定义,app,setItem,dispatchEventStroage,localStorage,import,监听
From: https://www.cnblogs.com/bokemoqi/p/18305674

相关文章

  • elementui的el-cascader-panel在jsx里如何自定义label和props属性
    render(){return(<el-cascader-panelonChange={(val)=>{this.handleFormatChange(val,'format','dataColumns',indexInMap)}}props={{renderLabel:(params)=>{......
  • ollama 模型国内加速下载,制作自定义Modelfile模型文件
    参考:https://www.zhihu.com/question/640579563/answer/3562899008https://github.com/ollama/ollama/blob/main/docs/modelfile.mdgguf格式介绍:https://www.datalearner.com/blog/10517057188355861、ollama模型国内加速下载ollama主要的模型文件格式是gguf,可以在mo......
  • 过滤器和拦截器以及监听器
    过滤器(Filter)1过滤器是Web应用中的一个组件,它能够对客户端和服务器之间的请求(Request)和响应(Response)进行拦截和处理2过滤器基于函数回调机制,依赖于Servlet容器3过滤器可以对几乎所有的请求起作用,可以在请求到达Servlet之前或响应发送给客户端之后对请求和响应进行加工处理......
  • 【扣子coze+微信开发者工具】实现ai自定义对话03:微信小程序js逻辑和接口实现
    目录摘要一、前言二、扣子API1. 扣子的API文档理解2.对话API深度理解2.1 bot_id2.2 additional_messages2.2.1role2.2.2 type2.2.3 content_type2.2.4 content2.3stream三、.js文件——发起对话(逻辑代码)1.纯文本text对话1.1content传入内容包装2.......
  • JavaScript全解析——本地存储✔(localStorage~sessionStorage~cookie)
    ●就是浏览器给我们提供的可以让我们在浏览器上保存一些数据●常用的本地存储(localStorage~sessionStorage~cookie)1-localStorage=>特点:->长期存储,除非手动删除否则会一直保存在浏览器中清除缓存或者卸载浏览器也就没有了->可以跨页面通讯,也就是说在一个页面写下......
  • 关于使用自定义按键的探索和实现
    目前游戏中大都支持自定义按键,在设置页面中,为了给玩家一个舒适或者更有空间的操作方式,我对在ue4中自定义按键输入的实现进行探索,当然ue4和ue5版本差别不大可以说大同小异。对于自定义按键,比如玩家开枪,跳跃翻滚,本来使用q,we,来完成,但是我们在设置中可以改变他的按键,所以初步实现......
  • VTK-自定义交互器、可拖拽坐标轴、视图定向立方体
    源代码:https://github.com/qianqiu10000/mySWInteractorStyle1.0.git仿照SolidWorks的操作习惯自定义的VTK交互器:1.左键单击Actor,可以选择Actor,并显示红色2.左键双击Actor,可以在Actor位置弹出拖拽坐标轴,可以移动、旋转3.单击空格键,可以弹出立方体视图定向工具4.按住鼠标......
  • Microsoft Office 自定义安装部署工具 | Mocreak
    软件简介:Mocreak是一款一键自动化下载、安装、部署正版Office的办公增强工具。该工具完全免费、无广告、绿色、无毒、简约、高效、安全。软件特点:一键快速下载、安装、部署最新版MicrosoftOffice软件。提供简约、高效,且可自定义的图形界面,提升部署效率。支持将Office安......
  • 自定义拦截器
    第一步:创建的first类去实现 HandlerInterceptor  按需重写里面的  preHandle(预处理)、postHandle(执行前也叫前置拦截器)、afterCompletion(渲染之后执行任务之前)方法第二步:创建好first类不代表拦截器生效了要去写个配置类去配置它。创建second类去实现WebM......
  • ros2,功能包下使用自定义的msg,msg文件在定义在当前文件下
    1.创建功能包,参考ros官方方式Writingasimplepublisherandsubscriber(C++)—ROS2Documentation:Humbledocumentationros2pkgcreate--build-typeament_cmake--licenseApache-2.0cpp_pubsub2.创建msg在cpp_pubsub功能包下创建msg文件夹 ros2_ws/cpp_pubsub......