Reusable clickaway directive for reusable Vue.js components
Reusable clickaway directive for reusable Vue.js components
Sometimes you need to detect clicks outside of the element (to close a modal
window or hide a dropdown select). There is no native event for that, and Vue.js
does not cover you either. This is why vue-clickaway
exists. Please check out
the demo before reading further.
If you need a version for Vue 1, try vue-clickaway@1.0
.
From npm:
$ npm install vue-clickaway --save
From CDN, chose the one you prefer:
<script src="https://cdn.jsdelivr.net/npm/vue-clickaway@2.2.2/dist/vue-clickaway.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-clickaway/2.2.2/vue-clickaway.min.js"></script>
<script src="https://cdn.rawgit.com/simplesmiler/vue-clickaway/2.2.2/dist/vue-clickaway.min.js"></script>
The recommended way is to use the mixin:
import { mixin as clickaway } from 'vue-clickaway';
export default {
mixins: [ clickaway ],
template: '<p v-on-clickaway="away">Click away</p>',
methods: {
away: function() {
console.log('clicked away');
},
},
};
If mixin does not suit your needs, you can use the directive directly:
import { directive as onClickaway } from 'vue-clickaway';
export default {
directives: {
onClickaway: onClickaway,
},
template: '<p v-on-clickaway="away">Click away</p>',
methods: {
away: function() {
console.log('clicked away');
},
},
};
onClickaway
turns into v-on-clickaway
,onClickAway
turns into v-on-click-away
.vue@^2.0
, directive were able to accept statements.v-on-clickaway="() => away(arg1)"
.v-on-clickaway
. Some UI libraries chose to implement these UI elements