当前位置: 代码网 > it编程>编程语言>Javascript > JavaScript自定义localStorage监听事件的解决方法

JavaScript自定义localStorage监听事件的解决方法

2024年11月03日 Javascript 我要评论
一、问题在项目开发过程中,发现有很多时候进行localstorage.setitem()操作设置本地存储后,页面必须刷新才能够获取到存储数据,而有些时候本地缓存更新后,页面无法通过再次刷新以获取本地缓

一、问题

在项目开发过程中,发现有很多时候进行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)
  })

到此这篇关于javascript自定义localstorage监听事件的解决方法的文章就介绍到这了,更多相关js自定义localstorage监听事件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com