Skip to content

Instantly share code, notes, and snippets.

@Erefor
Created August 14, 2022 02:20
Show Gist options
  • Save Erefor/1aa0c587bd0a9fc3e5c27683967df413 to your computer and use it in GitHub Desktop.
Save Erefor/1aa0c587bd0a9fc3e5c27683967df413 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}
}
@SuleymanAli
Copy link

Great. Thanks Much

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment