vue子组件中使用window.onresize()只执行一次问题

 更新时间:2024年08月10日 16:57:48   作者:小三金  
这篇文章主要介绍了vue子组件中使用window.onresize()只执行一次问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

描述

做了个简单的echarts组件,其中有个功能是当窗口变化时,刷新echarts。

用了window.onresize(),且用了防抖方法,但是一个页面中会有多处用到echarts的组件,重点是当将窗口拖拽时,却只执行了一次。

window.onresize = () => {
                delay(function () {
                    //防抖重画                    
                    _this.handleDispose()
                    _this.handleDraw()
                }, 500)
            }

解决方案

使用 window.addEventListener('resize',function(){})

window.addEventListener('resize', _this.handleReDraw)

区别:

  • window.addEventListener():为每个事件指定一个回调函数去处理,简单说,以我这个组件为例,是为每个组件都指定了一个回调函数处理
  • window.onresize():是统一用一个回调去去处理,简单说,N个子组件都用了一个同一个函数去处理,所以,只能最后一个子组件好用,因为后者覆盖了前面的方法

tips:

  • 根据你的业务逻辑,别忘了removeEventListener(),否则它会一直监听
  • 如果你的是后台管理系统,且有多页tabs功能(开多页功能),那么你要监听下route并做好除去监听方法,否则它也会一直监听

 watch: {
        options (newVal, oldVal) {
            let _this = this
            if (newVal) {
                _this.init()
            }
        },
        $route: {
            handler: function (route) {
                const _this = this

                if (route.name != "Index") {
                    //移除监听
                    window.removeEventListener('resize', _this.handleReDraw)
                } else {
                    //监听窗口变化
                    window.addEventListener('resize', _this.handleReDraw)
                }

            },
            immediate: true,
        },
    },

... 
// 页面初始化
    created () { },
    // 页面DOM加载完成
    mounted () {
        let _this = this
        _this.init()

        //监听窗口变化
        window.addEventListener('resize', _this.handleReDraw)

    },
    //离开页面时执行
    destroyed () {
        const _this = this

        //移除监听
        window.removeEventListener('resize', _this.handleReDraw)
    },
...

总结

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

相关文章

  • 基于Vue.js实现数字拼图游戏

    基于Vue.js实现数字拼图游戏

    为了进一步让大家了解Vue.js的神奇魅力,了解Vue.js的一种以数据为驱动的理念,本文主要利用Vue实现了一个数字拼图游戏,其原理并不是很复杂,下面跟着小编一起来学习学习。
    2016-08-08
  • 前端vue项目打包成桌面端exe应用的简单步骤

    前端vue项目打包成桌面端exe应用的简单步骤

    Electron是一个开源的框架,用于构建跨平台的桌面应用程序,这篇文章主要介绍了前端vue项目打包成桌面端exe应用的简单步骤,文中给出详细的代码示例,需要的朋友可以参考下
    2025-06-06
  • vue下拉列表功能实例代码

    vue下拉列表功能实例代码

    这篇文章主要介绍了vue下拉列表功能实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • vue 部署上线清除浏览器缓存的方式

    vue 部署上线清除浏览器缓存的方式

    这篇文章主要介绍了vue 部署上线清除浏览器缓存的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue vue-Router默认hash模式修改为history需要做的修改详解

    vue vue-Router默认hash模式修改为history需要做的修改详解

    今天小编就为大家分享一篇vue vue-Router默认hash模式修改为history需要做的修改详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue2 this直接获取data和methods原理解析

    Vue2 this直接获取data和methods原理解析

    这篇文章主要为大家介绍了Vue2 this直接获取data和methods原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Vue3响应式陷阱之对象引用丢失导致的数据更新失效的解决方法

    Vue3响应式陷阱之对象引用丢失导致的数据更新失效的解决方法

    最近在开发一个表单配置功能时,遇到了一个诡异的 Bug:明明在函数中成功赋值了,console.log 也打印出了正确的值,但页面上就是不显示,经过一番排查,发现这是一个典型的 Vue 响应式陷阱,今天分享出来,希望能帮到遇到类似问题的同学,需要的朋友可以参考下
    2025-11-11
  • 详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式

    详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式

    这篇文章主要介绍了详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • vue多级多选菜单组件开发

    vue多级多选菜单组件开发

    这篇文章主要为大家分享了vue多级多选菜单组件开发案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Vuepress生成文档部署到gitee.io的注意事项及说明

    Vuepress生成文档部署到gitee.io的注意事项及说明

    这篇文章主要介绍了Vuepress生成文档部署到gitee.io的注意事项及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论