vue如何监听页面缓存事件

 更新时间:2022年05月05日 08:47:55   作者:Mosowe  
这篇文章主要介绍了vue如何监听页面缓存事件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

监听页面缓存事件

事情的起因是这样的

项目中需要用到websocket,在网页刚打开的时候,就要进行对话的连接绑定,就我这菜鸟来说,第一次这么搞事情,也是刚接触websocket没多久,这咋整啊?在App.vue中设置了绑定,所有的信息返回都在app.vue组件里面,但是其他组件怎么去获取?而且需要缓存到本地。而当初我还没接触vuex,所以在其他组件里面获取服务器返回的信息只能借助于localStorage,这就郁闷了,这缓存咋监听呀?

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

Vue.prototype.resetSetItem = (key, newVal) => {
  if (key === 'websocketHistory') {
    // 创建一个StorageEvent事件
    let newStorageEvent = document.createEvent('StorageEvent');
    const storage = {
      setItem: (k, val) => {
        localStorage.setItem(k, val);
        // 初始化创建的事件
        newStorageEvent.initStorageEvent('setItem', false, false, k, null, val, null, null);
        // 派发对象
        window.dispatchEvent(newStorageEvent);
      }
    };
    return storage.setItem(key, newVal);
  }
};

这个时候,在其他页面写入缓存就不能直接用localStorage了

你需要这么设置

this.resetSetItem('websocketHistory', data);

然后在需要监听的页面中,created函数中使用

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

如此,便能在app.vue组件中使用获取服务器返回的信息并存入缓存,在其他组件,比如回话列表页面就可以实时更新列表,包括对话页面。

监听缓存事件代码

随着H5的更新,前端经常使用本地存储进行交互处理数据,如果想要监听缓存的变化,以下代码就是您想要的。

在main创建缓存事件

// 监听缓存事件
Vue.prototype.$addStorageEvent = function(type, key, data) {
    if (type === 1) {
        // 创建一个StorageEvent事件
        var newStorageEvent = document.createEvent("StorageEvent");
        const storage = {
            setItem: function(k, val) {
                localStorage.setItem(k, val);
                // 初始化创建的事件
                newStorageEvent.initStorageEvent(
                    "storageItem",
                    false,
                    false,
                    k,
                    null,
                    val,
                    null,
                    null
                );
                // 派发对象
                window.dispatchEvent(newStorageEvent);
            },
        };
        return storage.setItem(key, data);
    } else {
        // 创建一个StorageEvent事件
        var newStorageEvent = document.createEvent("StorageEvent");
        const storage = {
            setItem: function(k, val) {
                sessionStorage.setItem(k, val);
                // 初始化创建的事件
                newStorageEvent.initStorageEvent(
                    "setItem",
                    false,
                    false,
                    k,
                    null,
                    val,
                    null,
                    null
                );
                // 派发对象
                window.dispatchEvent(newStorageEvent);
            },
        };
        return storage.setItem(key, data);
    }
};

在组件生命周期中

监听缓存事件并取值

    window.addEventListener(
      "stotageItem",
      (e) => { // e代表存储的数据 { a:1 }
        JSON.parse(e.a)
      },
      false
    );

在组件业务代码

进行缓存使用

 this.$addStorageEvent(0, "useStorage", 
    // 写入数据
    JSON.stringify({ a:1 })
 );

以上就是全部代。仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中对象数组去重的实现

    vue中对象数组去重的实现

    这篇文章主要介绍了vue中对象数组去重的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • vue 输入电话号码自动按3-4-4分割功能的实现代码

    vue 输入电话号码自动按3-4-4分割功能的实现代码

    这篇文章主要介绍了vue 输入电话号码自动按3-4-4分割功能的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • vue中ref和$refs获取元素dom、获取子组件数据与方法调用示例

    vue中ref和$refs获取元素dom、获取子组件数据与方法调用示例

    在Vue3中要获取子组件的DOM节点,你可以使用ref来引用子组件,然后通过$refs来访问子组件的DOM,下面这篇文章主要给大家介绍了关于vue中ref和$refs获取元素dom、获取子组件数据与方法调用的相关资料,需要的朋友可以参考下
    2024-07-07
  • vue3实现问卷调查的示例代码

    vue3实现问卷调查的示例代码

    本文主要介绍了vue3实现问卷调查的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • vue中v-for通过动态绑定class实现触发效果

    vue中v-for通过动态绑定class实现触发效果

    这篇文章主要介绍了vue中v-for通过动态绑定class实现触发效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • element-ui 插槽自定义样式居中效果实现思路

    element-ui 插槽自定义样式居中效果实现思路

    这篇文章主要介绍了element-ui 插槽自定义样式居中效果,简单来讲实现思路是通过template标签可理解为一个内嵌组件,宽高重新定义,可在自定义内容外层套一层盒子,让盒子占满所有空间,再使用flex让内部元素居中,需要的朋友可以参考下
    2024-07-07
  • vue canvas绘制矩形并解决由clearRec带来的闪屏问题

    vue canvas绘制矩形并解决由clearRec带来的闪屏问题

    这篇文章主要介绍了vue canvas绘制矩形并解决由clearRec带来的闪屏问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • vue微信分享到朋友圈 vue微信发送给好友

    vue微信分享到朋友圈 vue微信发送给好友

    这篇文章主要为大家详细介绍了vue微信分享到朋友圈,vue微信发送给好友功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 在Vue中获取自定义属性方法:data-id的实例

    在Vue中获取自定义属性方法:data-id的实例

    这篇文章主要介绍了在Vue中获取自定义属性方法:data-id的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • vue2 如何实现div contenteditable=“true”(类似于v-model)的效果

    vue2 如何实现div contenteditable=“true”(类似于v-model)的效果

    这篇文章主要给大家介绍了利用vue2如何实现div contenteditable="true",就是类似于v-model的效果,文中给出了两种解决的思路,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02

最新评论