vue项目中销毁window.addEventListener事件监听解析

 更新时间:2022年07月27日 10:19:26   作者:前端小木偶  
这篇文章主要介绍了vue项目中销毁window.addEventListener事件监听,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

销毁window.addEventListener事件监听

今天在做项目的过程中,组件中调用iframe时,由于在组件的created方法中写了监听,用于接收iframe发来的信息,但是在组件销毁的时候并没有去掉监听,导致组件创建几次,监听方法就会执行几次,特此记录

created() {
    window.addEventListener('message', this.receiveMessage, false)
  },
beforeDestroy() { // 在组件生命周期结束的时候销毁。
    window.removeEventListener('message', this.receiveMessage, false)
  },

window.addEventListener监听scroll事件

今天想在vue的项目里面用下拉加载,然后就直接写了:

mounted () {
    window.addEventListener( 'scroll', this.scrollHander)
},
methods: {
    scrollHander () {  }
}

但是我发现我切换路由以后依旧其他页面也触发了scrollHandler函数,然后我想到使用了vue-router做的spa项目,window对象不变的,所以需要在每次使用后销毁。

解决办法

我回去看了下vue文档的生命周期,看到了destroyed,然后直接在这个周期内销毁就可以了。

mounted () {
    window.addEventListener('scroll', this.scrollHander)
},
destroyed () {
    window.removeEventListener('scroll', this.scrollHander)
}

使用throttle出现的新问题

下拉加载一般需要配合throttle限流函数(原理可以看这里)来避免频繁触发,所以优化代码成这样:

mounted () {
    let  _this = this
    window.addEventListener('scroll', throttle(() => {
        _this.scrollHander()
    },200 ))
},

然后发现没法用removeEventListener了,因为这个函数第二个参数不接受匿名函数。

最后代码

用一个变量中转下

mounted () {
    let  _this = this
    this.throttleLoad = throttle(() =>{
        _this.scrollHander()
    },200)
    window.addEventListener('scroll', this.throttleLoad)
},
destroyed () {
    window.removeEventListener('scroll',this.throttleLoad) 
},
methods: { 
    scrollHander () { }
}

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

相关文章

  • vue-cli如何引入bootstrap工具的方法

    vue-cli如何引入bootstrap工具的方法

    本篇文章主要介绍了vue-cli如何引入bootstrap工具的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • vue 遮罩和ref的使用setup版和非setup版

    vue 遮罩和ref的使用setup版和非setup版

    这篇文章主要介绍了vue 遮罩和ref的使用,setup版和非setup版,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • vue简单实现一个虚拟列表的示例代码

    vue简单实现一个虚拟列表的示例代码

    虚拟列表只渲染当前可视区域的列表,并不会将所有的数据渲染,本文主要介绍了vue简单实现一个虚拟列表的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • vue中使用$emit传递多个参数的2种方法

    vue中使用$emit传递多个参数的2种方法

    这篇文章主要给大家介绍了关于vue中如何使用$emit传递多个参数的2种方法,在Vue中可以使用$emit方法向父组件传递数据,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • el-select 下拉框全选、多选的几种方式组件示例详解

    el-select 下拉框全选、多选的几种方式组件示例详解

    这篇文章主要介绍了el-select 下拉框全选、多选的几种方式组件示例详解,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • vue-loader教程介绍

    vue-loader教程介绍

    本篇文章主要介绍了vue-loader教程介绍,vue-loader就是告诉webpack如何将vue格式的文件转换成js。有兴趣的可以了解一下
    2017-06-06
  • vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果的代码

    vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果的代码

    这篇文章主要介绍了vue navbar tabbar导航条根据位置移动实现定位、颜色过渡动画效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • vue watch深度监听对象实现数据联动效果

    vue watch深度监听对象实现数据联动效果

    这篇文章主要介绍了vue watch深度监听对象实现数据联动的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Vue实现录制屏幕并本地保存功能

    Vue实现录制屏幕并本地保存功能

    这篇文章主要介绍了Vue实现录制屏幕功能并本地保存,这里用的是用的是HBuilder X开发,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 详解在vue开发中如何利用.env文件

    详解在vue开发中如何利用.env文件

    我们在 vue 项目的目录中经常看到 env 开头的文件,在文件内声明一些变量,这些变量就是一些配置变量,在不同环境下可使用的变量,本文我们将给大家介绍在vue开发中如何利用.env文件,需要的朋友可以参考下
    2023-10-10

最新评论