window.onresize 事件监听覆盖问题

问题描述:window.onresize 事件覆盖导致echarts组件复用时未响应大小

在组件内部监听 resize事件,如果在一个页面中多次复用组件,因为事件覆盖,会导致只有最后一个组件能响应onresize事件
image.png

解决方法:在父组件(使用页面)中监听 resize 事件设置一个resize状态,然后将 resize 状态传递给子组件,在子组件中 watch 这个状态变化

父组件监听事件,设置一个状态

  1. const resized = ref(0)
  2. const changeResized = () => {
  3. resized.value += 1
  4. }
  5. onMounted(() => {
  6. window.addEventListener('resize', changeResized)
  7. })
  8. onUnmounted(() => {
  9. window.removeEventListener('resize', changeResized)
  10. })

将状态传给子组件
image.png
在子组件通过 watch 这个状态变化来间接监听 resize 事件
image.png

组件销毁时取消事件监听、定时器

  1. const resized = ref(0)
  2. const changeResized = () => {
  3. resized.value += 1
  4. }
  5. onMounted(() => {
  6. window.addEventListener('resize', changeResized)
  7. })
  8. onUnmounted(() => {
  9. window.removeEventListener('resize', changeResized)
  10. })