vue實(shí)現(xiàn)監(jiān)聽localstorage值變化
vue監(jiān)聽localstorage值變化
在vue中實(shí)現(xiàn)監(jiān)聽localstorage中某個(gè)鍵對應(yīng)的值的變化
在根目錄下創(chuàng)建一個(gè)名為utils的文件夾,在文件夾中創(chuàng)建一個(gè)tool.js文件
//****將這段內(nèi)容放在tool.js文件中**** // 重寫setItem事件,當(dāng)使用setItem的時(shí)候,觸發(fā),window.dispatchEvent派發(fā)事件 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) ? ? } } export default dispatchEventStroage;
在main.js中引入使用
import tool from "./utils/tool"; Vue.use(tool);
在需要監(jiān)聽localstorage中數(shù)據(jù)變化的文件中加以下代碼
//解決this指向問題,在window.addEventListener中this是指向window的。 //需要將vue實(shí)例賦值給_this,這樣在window.addEventListener中通過_this可以為vue實(shí)例上data中的變量賦值 let _this=this; //根據(jù)自己需要來監(jiān)聽對應(yīng)的key window.addEventListener("setItemEvent",function(e){ ?? ?//e.key : 是值發(fā)生變化的key ?? ?//例如 e.key==="token"; ?? ?//e.newValue : 是可以對應(yīng)的新值 ?? ?if(e.key==="token"){ ?? ??? ?console.log(e.newValue); ?? ??? ?_this.token=e.newValue; ?? ?} })
到這里就可以在localstorage中token的值變化時(shí)在控制臺輸出新的值了 , 此方法只能監(jiān)聽到setItem事件.
監(jiān)聽localStorage中值的變化實(shí)現(xiàn)跨頁面通信
分享一個(gè)之前困擾很久的,跨頁面之間的通信方式。
以前跨頁面通信,就拿我們之前vue項(xiàng)目中多頁面為例,每個(gè)頁面都是一個(gè)獨(dú)立的vue實(shí)例,通過main.js初始化,各個(gè)頁面之間的數(shù)據(jù)不互通,而通信方式最常見的方式是往緩存中存儲值,其他需要得到這個(gè)值的頁面通過定時(shí)器去實(shí)時(shí)查詢緩存中該值的變化,然后進(jìn)行通信。
但是定時(shí)器終究不是一個(gè)好的實(shí)現(xiàn)方式,而定時(shí)器的時(shí)間長短設(shè)置多少都很有考究,時(shí)間太短太耗性能,時(shí)間太長的話,又會存在一段時(shí)間拿不到最新值的情況。
現(xiàn)在有一個(gè)很方便的方式,那就是 監(jiān)聽,其他頁面正常像以前一樣往 storage 存儲值,如:localStorage.setItem(‘calling’, ‘55894’),然后需要獲取該值的頁面可以通過監(jiān)聽storage,就直接拿到變化后的值,示例如下:
// localhost:8080/pageOne 頁面 localStorage.setItem('calling', '55894')
// localhost:8080/pageTwo 頁面 window.addEventListener('storage', event => { if(event.key === 'calling') { services.call(event.newValue) } })
部分屬性介紹如下
event.key
:屬性值為在 sessionStorage 或 localStorage 中被修改/新添加的數(shù)據(jù)鍵值;event.oldValue
:屬性值為在 sessionStorage 或 localStorage 中被修改前的值;event.newValue
:屬性值為在 sessionStorage 或 localStorage 中被修改后的值;event.url
:屬性值為修改 sessionStorage 或 localStorage 中值的頁面的URL地址,即該值在哪個(gè)頁面被寫入/被修改的;
tips:只能監(jiān)聽 sessionStorage 或 localStorage 中值的變化,不能監(jiān)聽cookie中值的變化。
其余屬性截圖如下
好了,以上就是跨頁面之間通信的一種方式。
這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue監(jiān)聽localstorage變化的方法詳解
- 教你在Vue3中使用useStorage輕松實(shí)現(xiàn)localStorage功能
- Vue中l(wèi)ocalStorage的用法和監(jiān)聽localStorage值的變化
- Vue項(xiàng)目如何保持用戶登錄狀態(tài)(localStorage+vuex刷新頁面后狀態(tài)依然保持)
- vue中LocalStorage與SessionStorage的區(qū)別與用法
- VUE對Storage的過期時(shí)間設(shè)置,及增刪改查方式
- Vue封裝localStorage設(shè)置過期時(shí)間的示例詳解
相關(guān)文章
Vue router動(dòng)態(tài)路由實(shí)現(xiàn)過程
Vue動(dòng)態(tài)路由(約定路由),聽起來好像很玄乎的樣子,但是你要是理解了實(shí)現(xiàn)思路,你會發(fā)現(xiàn)沒有想象中的那么難,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)動(dòng)態(tài)路由添加功能的簡單方法,需要的朋友可以參考下2023-03-03vue中swiper開啟loop后,點(diǎn)擊事件不響應(yīng)的解決方案
這篇文章主要介紹了vue中swiper開啟loop后,點(diǎn)擊事件不響應(yīng)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09vue3項(xiàng)目如何國際化實(shí)戰(zhàn)指南
像很多大型的網(wǎng)址,特別是跨國際等公司網(wǎng)頁,訪問來自世界各地用戶,所以網(wǎng)頁的國際化極其重要的需求,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目如何國際化的相關(guān)資料,需要的朋友可以參考下2022-09-09vue?parseHTML?函數(shù)拿到返回值后的處理源碼解析
這篇文章主要為大家介紹了vue?parseHTML?函數(shù)拿到返回值后的處理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Vue 實(shí)現(xiàn)點(diǎn)擊空白處隱藏某節(jié)點(diǎn)的三種方式(指令、普通、遮罩)
最近小編接到這樣的需求:彈出框(或Popover)在 show 后,點(diǎn)擊空白處可以將其 hide。針對這個(gè)需求,小編整理了三種實(shí)現(xiàn)方式,如果大家對vue 點(diǎn)擊空白隱藏節(jié)點(diǎn)問題感興趣的朋友跟隨小編一起看看吧2019-10-10