JavaScript自定義localStorage監(jiān)聽(tīng)事件的解決方法
一、問(wèn)題
在項(xiàng)目開(kāi)發(fā)過(guò)程中,發(fā)現(xiàn)有很多時(shí)候進(jìn)行localStorage.setItem()操作設(shè)置本地存儲(chǔ)后,頁(yè)面必須刷新才能夠獲取到存儲(chǔ)數(shù)據(jù),而有些時(shí)候本地緩存更新后,頁(yè)面無(wú)法通過(guò)再次刷新以獲取本地緩存,這就導(dǎo)致依賴本地緩存的數(shù)據(jù)無(wú)法進(jìn)行更新。為了解決這個(gè)問(wèn)題,就必須要用到自定義localStorage監(jiān)聽(tīng)事件了
二、解決方法
下面以Vue3項(xiàng)目為例進(jìn)行自定義localStorage監(jiān)聽(tīng)事件方法闡述。
首先,在根目錄src目錄下新建utils文件夾,在utils文件夾下新增overwrite.js文件,文件內(nèi)容如下:
// overwrite.js
// 重寫(xiě)setItem事件,當(dāng)使用setItem的時(shí)候,觸發(fā),window.dispatchEvent派發(fā)事件
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)
}
}
接下來(lái),在項(xiàng)目的入口文件main.js下引入自定義的重寫(xiě)方法
1、引入文件的方法
import {dispatchEventStroage} from "./utils/overwrite"
2、全局使用即可。
dispatchEventStroage()
3、完整main.js引入的示例,如有不清楚的地方請(qǐng)參考下面的完整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("監(jiān)聽(tīng)到觸發(fā)了localStorage.setItem事件",e)
})
到此這篇關(guān)于JavaScript自定義localStorage監(jiān)聽(tīng)事件的解決方法的文章就介紹到這了,更多相關(guān)JS自定義localStorage監(jiān)聽(tīng)事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于JavaScript實(shí)現(xiàn)全屏透明遮罩div層鎖屏效果
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)全屏透明遮罩div層鎖屏效果的相關(guān)資料,需要的朋友可以參考下2016-01-01
JavaScript實(shí)現(xiàn)移動(dòng)端頁(yè)面按手機(jī)屏幕分辨率自動(dòng)縮放的最強(qiáng)代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)移動(dòng)端頁(yè)面按手機(jī)屏幕分辨率自動(dòng)縮放的最強(qiáng)代碼,通過(guò)阻止瀏覽器的默認(rèn)行為各方面分析縮放的功能實(shí)現(xiàn),具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08
JS實(shí)現(xiàn)顏色動(dòng)態(tài)淡化效果
本文主要介紹了JS實(shí)現(xiàn)顏色動(dòng)態(tài)淡化效果的實(shí)例,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03
JavaScript設(shè)置彈出式獨(dú)立窗口頁(yè)面和window的方法舉例詳解
window.open是網(wǎng)頁(yè)中經(jīng)常遇到的彈出窗口代碼,不是網(wǎng)絡(luò)中比較反感的那類(lèi)彈出代碼,下面這篇文章主要給大家介紹了關(guān)于JavaScript設(shè)置彈出式獨(dú)立窗口頁(yè)面和window的方法,需要的朋友可以參考下2024-01-01
js實(shí)現(xiàn)類(lèi)似于add(1)(2)(3)調(diào)用方式的方法
這篇文章主要介紹了js實(shí)現(xiàn)類(lèi)似于add(1)(2)(3)調(diào)用方式的方法,需要的朋友可以參考下2015-03-03
JavaScript中while循環(huán)的基礎(chǔ)使用教程
這篇文章主要給大家介紹了關(guān)于JavaScript中while循環(huán)的基礎(chǔ)使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08

