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)文章
Vue2.0實(shí)現(xiàn)組件數(shù)據(jù)的雙向綁定問題
這篇文章主要介紹了Vue2.0實(shí)現(xiàn)組件數(shù)據(jù)的雙向綁定問題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03
vue-pdf實(shí)現(xiàn)pdf在線預(yù)覽并實(shí)現(xiàn)自定義預(yù)覽框高度
這篇文章主要介紹了vue-pdf實(shí)現(xiàn)pdf在線預(yù)覽并實(shí)現(xiàn)自定義預(yù)覽框高度方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
解決vue elementUI 使用el-select 時(shí) change事件的觸發(fā)問題
這篇文章主要介紹了解決vue elementUI 使用el-select 時(shí) change事件的觸發(fā)問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue中將el-switch值true、false改為number類型的1和0
這篇文章主要介紹了vue中將el-switch值true、false改為number類型的1和0問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
利用Vue3+Element-plus實(shí)現(xiàn)大文件分片上傳組件
在開發(fā)中如果上傳的文件過大,可以考慮分片上傳,分片就是說將文件拆分來進(jìn)行上傳,將各個(gè)文件的切片傳遞給后臺,然后后臺再進(jìn)行合并,下面這篇文章主要給大家介紹了關(guān)于利用Vue3+Element-plus實(shí)現(xiàn)大文件分片上傳組件的相關(guān)資料,需要的朋友可以參考下2023-01-01

