vue-localStorageを書き換えます.setItemメソッドは、変動をリスニングし、リアルタイムで更新します.
1711 ワード
ローカルストレージの値が変更されたときにjsがリアルタイムで監視できない問題を解決問題説明:jsでlocalstorageの値を取得しましたが、後期に変更される可能性があります.jsは一度だけ実行しても再び値を取得できません.もちろん、ページ取得をリフレッシュできますが、私たちのページではページをリフレッシュできません.この場合: localStorageのsetItemメソッドを書き換えることができます.setItemメソッドを呼び出して新しい値を設定すると、new Event('setItemEvent') になります.しかし、インスタンス化された事件にすぎません.どうやって傍受しますか? windowを使えます.dispatchEvent()この方法はwindowに傍受させるイベントを配布します.新しいインスタンスからのこのイベントはwindowにバインドされて呼び出しを傍受し、呼び出し時にsetItemの新しい値を取得することができ、直接値を割り当てることができます
具体的な実装 srcの下にutilsフォルダを新規作成し、toolsを新規作成します.jsは、dispatchEventStroageメソッド を投げ出すはmainです.jsにはグローバルに導入され、useされ、setitemEventがすぐに有効にならないという問題を解決するためにdispatchEventStroageメソッドを呼び出す で使えます リクエストを送信するたびにtokenフィールドを携帯する必要がある場合、tokenはlocalstorageに存在する場合がありますが、tokenが変更された場合、jsは変更されたことを知らないので、以上の方法が必要です.
具体的な実装
// setItem , setItem , ,window.dispatchEvent
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)
}
}
import Tools from '@/utils/tools'
Vue.use(Tools)
// setItemEvent ,
Tools.dispatchEventStroage()
const reqHeaders = {
Accept: 'text/json',
// token, token
token: localStorage.getItem('token') || ''
}
// window localStorage setItem
window.addEventListener('setItemEvent', function (e) {
reqHeaders.token = e.newValue
})