最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue如何監(jiān)聽頁面緩存事件

 更新時間:2022年05月05日 08:47:55   作者:Mosowe  
這篇文章主要介紹了vue如何監(jiān)聽頁面緩存事件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

監(jiān)聽頁面緩存事件

事情的起因是這樣的

項(xiàng)目中需要用到websocket,在網(wǎng)頁剛打開的時候,就要進(jìn)行對話的連接綁定,就我這菜鳥來說,第一次這么搞事情,也是剛接觸websocket沒多久,這咋整啊?在App.vue中設(shè)置了綁定,所有的信息返回都在app.vue組件里面,但是其他組件怎么去獲???而且需要緩存到本地。而當(dāng)初我還沒接觸vuex,所以在其他組件里面獲取服務(wù)器返回的信息只能借助于localStorage,這就郁悶了,這緩存咋監(jiān)聽呀?

首先在main.js里面配置vue原型:

Vue.prototype.resetSetItem = (key, newVal) => {
? if (key === 'websocketHistory') {
? ? // 創(chuàng)建一個StorageEvent事件
? ? let newStorageEvent = document.createEvent('StorageEvent');
? ? const storage = {
? ? ? setItem: (k, val) => {
? ? ? ? localStorage.setItem(k, val);
? ? ? ? // 初始化創(chuàng)建的事件
? ? ? ? newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);
? ? ? ? // 派發(fā)對象
? ? ? ? window.dispatchEvent(newStorageEvent);
? ? ? }
? ? };
? ? return storage.setItem(key, newVal);
? }
};

這個時候,在其他頁面寫入緩存就不能直接用localStorage了

你需要這么設(shè)置

this.resetSetItem('websocketHistory', data);

然后在需要監(jiān)聽的頁面中,created函數(shù)中使用

window.addEventListener('setItem', () => {
? console.log(JSON.parse(localStorage.getItem('websocketHistory'))); ? ??
});

如此,便能在app.vue組件中使用獲取服務(wù)器返回的信息并存入緩存,在其他組件,比如回話列表頁面就可以實(shí)時更新列表,包括對話頁面。

監(jiān)聽緩存事件代碼

隨著H5的更新,前端經(jīng)常使用本地存儲進(jìn)行交互處理數(shù)據(jù),如果想要監(jiān)聽緩存的變化,以下代碼就是您想要的。

在main創(chuàng)建緩存事件

// 監(jiān)聽緩存事件
Vue.prototype.$addStorageEvent = function(type, key, data) {
    if (type === 1) {
        // 創(chuàng)建一個StorageEvent事件
        var newStorageEvent = document.createEvent("StorageEvent");
        const storage = {
            setItem: function(k, val) {
                localStorage.setItem(k, val);
                // 初始化創(chuàng)建的事件
                newStorageEvent.initStorageEvent(
                    "storageItem",
                    false,
                    false,
                    k,
                    null,
                    val,
                    null,
                    null
                );
                // 派發(fā)對象
                window.dispatchEvent(newStorageEvent);
            },
        };
        return storage.setItem(key, data);
    } else {
        // 創(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, data);
    }
};

在組件生命周期中

監(jiān)聽緩存事件并取值

? ? window.addEventListener(
? ? ? "stotageItem",
? ? ? (e) => { // e代表存儲的數(shù)據(jù) { a:1 }
? ? ? ? JSON.parse(e.a)
? ? ? },
? ? ? false
? ? );

在組件業(yè)務(wù)代碼

進(jìn)行緩存使用

?this.$addStorageEvent(0, "useStorage",?
? ? // 寫入數(shù)據(jù)
? ? JSON.stringify({ a:1 })
?);

以上就是全部代。僅為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

琼结县| 南京市| 如皋市| 嘉荫县| 济宁市| 浦江县| 靖西县| 德保县| 建湖县| 体育| 新和县| 祥云县| 无极县| 新晃| 金昌市| 青川县| 五原县| 株洲县| 历史| 黄石市| 清河县| 吉木乃县| 紫金县| 宜黄县| 和顺县| 东明县| 遵义县| 北流市| 湖北省| 布尔津县| 南木林县| 香港| 东乡县| 钦州市| 江永县| 平塘县| 子长县| 嘉黎县| 新营市| 东阳市| 固原市|