Skip to content

Instantly share code, notes, and snippets.

@tobihans
Forked from Erefor/component.vue
Created January 11, 2023 17:38
Show Gist options
  • Save tobihans/7c6d1c363f6275e089e153cd01bd564e to your computer and use it in GitHub Desktop.
Save tobihans/7c6d1c363f6275e089e153cd01bd564e to your computer and use it in GitHub Desktop.
Vue 3 / Options Api Detect outside click
<template>
<div
ref="componentRef"
class="general-style"
>
</div>
</template>
<script>
import useDetectOutsideClick from '/useDetectOutsideClick'
export default {
data(){
return {
data: 'hello'
}
},
mounted(){
useDetectOutsideClick(this.$refs.componentRef, () => {
this.data = 'edit hello'
})
}
}
</script>
import {onBeforeUnmount, onMounted} from 'vue'
export default function useDetectOutsideClick(component, callback) {
if (!component) return
const listener = (event) => {
if (event.target !== component.value && event.composedPath().includes(component.value)) {
return
}
if (typeof callback === 'function') {
callback()
}
}
onMounted(() => { window.addEventListener('click', listener) })
onBeforeUnmount(() => {window.removeEventListener('click', listener)})
return {listener}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment