vue實現(xiàn)監(jiān)聽數(shù)值的變化,并捕捉到
上傳頭像的例子是完整的,登錄沒全部展示
1. 封裝全局監(jiān)聽方法
在main.js中給引入watchsessionStorage(可以放多個函數(shù))。
約定監(jiān)聽的sessionStorage的值為"dialogLogin",“avatarUrl”,然后創(chuàng)建StorageEvent方法,當(dāng)執(zhí)行sessionStorage.setItem(k, val) 時,初始化事件,并派發(fā)事件
//用于登錄判斷是否有token export function resetSetItem(key, newVal) { if (key === 'dialogLogin') { // 創(chuàng)建一個StorageEvent事件 var newStorageEvent = document.createEvent('StorageEvent'); const storage = { setItem: function (k, val) { sessionStorage.setItem(k, val); // 初始化創(chuàng)建的事件 newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null); // 派發(fā)對象 window.dispatchEvent(newStorageEvent) } } return storage.setItem(key, newVal); } } //用于上傳頭像事,頭部實時改變 export function resetSetItemAvatar(key, newVal) { if (key === 'avatarUrl') { // 創(chuàng)建一個StorageEvent事件 var newStorageEvent = document.createEvent('StorageEvent'); const storage = { setItem: function (k, val) { sessionStorage.setItem(k, val); // 初始化創(chuàng)建的事件 newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null); // 派發(fā)對象 window.dispatchEvent(newStorageEvent) } } return storage.setItem(key, newVal); } }
2. 觸發(fā),并將監(jiān)聽的值存入Storage
例如在某個路由中需要將某個值作為監(jiān)聽的值,則在該路由下的調(diào)用該方法。
resetSetItemAvatar('avatarUrl',res.data.avatar); //res.data.avatar就是你要存入的值(例子:avatar頭像)
3. 監(jiān)聽
如果在另一個路由下需要根據(jù)watchStorage的值變化來刷新請求的頁面數(shù)據(jù)時,可以在這個路由下的created鉤子函數(shù)中監(jiān)聽。
window.addEventListener('setItem', ()=> { //這里就可以根據(jù)具體情況調(diào)用或刷新需要的操作 this.avatar = sessionStorage.getItem("avatarUrl");; //獲取監(jiān)聽的值 })
完整例子(代碼看上面 ??)
第一步
在utils文件夾新建一個js
第二步
在main.js引入(用于登錄部分,可看可不看)
第二步
在上傳頭像的vue頁面引入(用于存儲頭像,主要例子)
第三步
在header.vue使用(只要上傳頭像,這里就會捕捉到,刷新頭像)
效果圖
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
webstorm提示?@路徑?Module?is?not?installed的問題
這篇文章主要介紹了webstorm提示?@路徑?Module?is?not?installed的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11Vue項目添加前綴,ngnix發(fā)布相關(guān)修改問題
這篇文章主要介紹了Vue項目添加前綴,ngnix發(fā)布相關(guān)修改問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07