vue后台项目,销毁屏幕监听的全局事件 window.addEventListener('resize', this.resetResize)

在这里踩到到了两个坑

  1. 直接使用了window.addEventListener('resize', () => { console.log('hi') this.myEchart.resize() })

  2. 这是vue后台系统用的element组件的侧边栏,会自动缓存页面,切换页面不会销毁页面

第一个坑

image

这样直接写在监听事件里面,到时候销毁的时候,使用window.removeEventListener("resize", () => { this.myEchart.resize() })销毁不了这个事件的

所以要这样使用

image

因为监听要是一个函数所以this.resetResize,不能带()

第二个坑

这是vue后台系统用的element组件的侧边栏,会自动缓存页面,切换页面不会销毁页面

方法一
<keep-alive :exclude="['a', '组件名']">
  <router-view :key="key" />
</keep-alive>

把这个当前的组件缓存去掉

但是我不喜欢这个方法,会去掉缓存切换页面时又要重新加载,影响性能

方法二
watch: {
    //如果$route.fullPath改变了,就是从当前页面离开了,就销毁掉全局的监听事件,不然这全局事件会一直存在,造成内存泄漏!
    '$route.fullPath': {
      handler() {
        window.removeEventListener("resize", this.resetResize)
      }
    }
  }

通过监听当前路由的改变来销毁,这样就不会影响缓存,写代码也方便

posted @   嘿!那个姑娘  阅读(5193)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示