addEventListener 和 removeEventListener
EventTarget.addEventListener() 方法将指定的监听器注册到 EventTarget 上,当该对象触发指定的事件时,指定的回调函数就会被执行。事件目标可以是一个文档上的元素 Element,Document和Window或者任何其他支持事件的对象 (比如 XMLHttpRequest)。
addEventListener()的工作原理是将实现EventListener的函数或对象添加到调用它的EventTarget上的指定事件类型的事件侦听器列表中。
使用 addEventListener 监听 click 事件, 监听回调为 clickListener,结合了 Element.contains() 以实现击行为发生在 menuPanel(菜单区域) 区域外,关闭右键弹起的菜单。如下:
mounted () {
// 监听 click 事件
document.addEventListener('click', this.clickListener)
},
beforeDestroy () {
// 移除监听
document.removeEventListener('click', this.clickListener)
},
clickListener (event) {
if (this.type === 'detail') return
if (!this.$refs.menuPanel) return
// 点击行为发生在 menuPanel(菜单区域) 区域外,关闭右键弹起的菜单
// element.contains(),有时是非常有用的 api
if (this.$refs.menuPanel && !this.$refs.menuPanel.contains(event.target)) {
this.showMenu = false
}
},