🚀 Vue.js directive to handle clicking outside of an element
💪 Great for use cases such as dropdowns and popovers
💻 Simple integration with Vue template
🏎️ Advanced configuration to increase performance
Install via npm:
npm install vue-unclick
Register the directive globally with your Vue.js app:
import { createApp } from "vue"
import unclick from "vue-unclick"
const app = createApp({})
app.directive("unclick", unclick)
app.mount("#app")
You can apply the directive to any element and the callback method will be fired whenever there is a click on the screen outside of an element (this is what we mean by "un-clicking"):
<template>
<div v-unclick="hideDropdown">
<a href="#" @click="toggleDropdown">
Toggle dropdown
</a>
<div v-show="isVisible">
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</p>
<p>Dolore ea quibusdam doloremque pariatur rerum cumque quam.</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isVisible: false
}
},
methods: {
hideDropdown(event) {
console.log(event)
this.isVisible = false
},
toggleDropdown() {
this.isVisible = !this.isVisible
}
}
}
</script>
In order to optimize the performance, you can conditionally control when the directive listens for clicks by adding an boolean argument to the directive:
<template>
<div v-unclick:[isVisible]="hideDropdown">
...
</div>
</template>
In the above example, event listeners will only be added when isVisible
is
truthy in order to avoid unnecessary overheads. This approach is strongly
recommended.
docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app node:latest npm run test -- --coverage