點燈坊

失くすものさえない今が強くなるチャンスよ

Vue 註冊 DOM Event

Sam Xiao's Avatar 2020-11-27

Vue 並沒有包括所有 DOM Event,但我們可使用 addEventListener()removeEventListener() 自行註冊 DOM Event 到 Vue。

Version

Vue 2.6.11

addEventListener()

dom000

對 browser 做 resize 時,在 Vue 也能處理 resize event。

<template>
  <div>Vue</div>
</template>

<script>
let onResize = function() {
  console.log(innerWidth, innerHeight)
}

let mounted = function() {
  addEventListener('resize', this.onResize)
}

let beforeDestroy = function() {
  removeEventListener('resize', this.onResize)
}

export default {
  methods: {
    onResize
  },
  mounted,
  beforeDestroy
}
</script>

19 行

methods: {
  onResize
},

methods 宣告 onResize() 處理 resize event。

10 行

let mounted = function() {
  addEventListener('resize', this.onResize)
}

mounted hook 使用 addEventListener()onResize() 註冊到 resize event。

14 行

let beforeDestroy = function() {
  removeEventListener('resize', this.onResize)
}

beforeDestroy hook 使用 removeEventListener()onResize()resize event 註銷。

第 6 行

let onResize = function() {
  console.log(innerWidth, innerHeight)
}

可在 onResize() 處理 resize event,可直接使用 innerWidthinnerHeight 讀取 resize 後的寬高。

Conclusion

  • 儘管 Vue 沒有包含所有 DOM event,但透過此種方式我們也可在 Vue 處理