npm.io
1.0.5 • Published 4 years ago

vue-unclick

Licence
MIT
Version
1.0.5
Deps
0
Size
14 kB
Vulns
0
Weekly
0

Vue-unclick

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

Installation

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")

Usage

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.

Testing

docker run -it --rm -v "$PWD":/usr/src/app -w /usr/src/app node:latest npm run test -- --coverage

Keywords