vue가 윈도우에resize 이벤트에 부딪힌 구덩이를 추가하고 제거하는 것을 해결합니다

1946 단어 vuewindowresize
vue 프로젝트에서 윈도우 창의 변화를 감청해야 할 때 그림의 높이를 계산하기 때문에 감청 이벤트를 추가합니다.감청된 것은 사실이지만, 현재 페이지를 떠나 다른 페이지로 들어가 창을 바꾸는 시간에 윈도우가 감청 상태인 것을 발견했습니다. 즉, 감청 이벤트를 제거하는 것은 효과가 없습니다.

  // , 
  mounted(){
    window.addEventListener('resize',()=>{
      ' '
    });
  },
  beforeDestroy() {
    window.removeEventListener("resize");
  }
나중에 관련 자료를 찾아보니 다음과 같은 방법으로 감청을 제거할 수 있다

  methods: {
    listenResize(){
      ' '
    }
  },
  mounted(){
    window.addEventListener('resize',this.listenResize); 
  },
  beforeDestroy() {
    window.removeEventListener("resize",this.listenResize);
  }
보충 지식: vue 감청 화면 변화 & 감청 이벤트 제거
작은 구덩이를 한 번 기억해라.
echarts를 사용하려면 화면에 적응해야 하기 때문에 vue에서 이벤트를 감청하고 성능 문제를 고려하여lodash 라이브러리의 debounce로 패키지를 만들었습니다.코드는 다음과 같습니다.

mounted() {
  window.addEventListener('resize', debounce(this.resize,200), true)
},
beforeDestroy() {
  window.removeEventListener('resize', this.resize, true)
},
methods: {
  resize() {
   this.radarChart.resize()
  }
}
그러나 다른 페이지로 전환할 때 화면이 바뀔 때resize 이벤트를 촉발하는 것을 발견했다. 이전에 비슷한 기능을 썼기 때문에 코드는 문제가 없지만 촉발할 수 있다는 것을 발견했다. 마음속으로도 이상하다. 연구한 결과addEventListener의 방법에 debounce를 추가하지 않으면 된다.다음과 같습니다.

mounted() {
  window.addEventListener('resize', this.resize, true)
},
beforeDestroy() {
  window.removeEventListener('resize', this.resize, true)
},
methods: {
  resize: debounce(function() {
   this.radarChart.resize()
  }, 300),
 }
debounce는 메서드에 넣어야 합니다.또한 내부 함수체는 화살표 함수를 사용할 수 없습니다. 그렇지 않으면thisundefined의 문제를 보고합니다.
이상의 해결 vue가 윈도우에resize 사건을 추가하고 제거하는 데 부딪힌 구덩이는 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고 부탁드리고 저희를 많이 사랑해 주세요.

좋은 웹페이지 즐겨찾기