项目作者: simplesmiler

项目描述 :
Reusable clickaway directive for reusable Vue.js components
高级语言: JavaScript
项目地址: git://github.com/simplesmiler/vue-clickaway.git
创建时间: 2015-09-13T10:21:30Z
项目社区:https://github.com/simplesmiler/vue-clickaway

开源协议:MIT License

下载


vue-clickaway

Reusable clickaway directive for reusable Vue.js components

npm version
CDNJS

Overview

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.

Requirements

  • vue: ^2.0.0

If you need a version for Vue 1, try vue-clickaway@1.0.

Install

From npm:

  1. $ npm install vue-clickaway --save

From CDN, chose the one you prefer:

  1. <script src="https://cdn.jsdelivr.net/npm/vue-clickaway@2.2.2/dist/vue-clickaway.min.js"></script>
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-clickaway/2.2.2/vue-clickaway.min.js"></script>
  3. <script src="https://cdn.rawgit.com/simplesmiler/vue-clickaway/2.2.2/dist/vue-clickaway.min.js"></script>

Usage

  1. Make the directive available to your component
  2. Define a method to be called
  3. Use the directive in the template

The recommended way is to use the mixin:

  1. import { mixin as clickaway } from 'vue-clickaway';
  2. export default {
  3. mixins: [ clickaway ],
  4. template: '<p v-on-clickaway="away">Click away</p>',
  5. methods: {
  6. away: function() {
  7. console.log('clicked away');
  8. },
  9. },
  10. };

If mixin does not suit your needs, you can use the directive directly:

  1. import { directive as onClickaway } from 'vue-clickaway';
  2. export default {
  3. directives: {
  4. onClickaway: onClickaway,
  5. },
  6. template: '<p v-on-clickaway="away">Click away</p>',
  7. methods: {
  8. away: function() {
  9. console.log('clicked away');
  10. },
  11. },
  12. };

Caveats

  1. Pay attention to the letter case. onClickaway turns into v-on-clickaway,
    while onClickAway turns into v-on-click-away.
  2. Prior to vue@^2.0, directive were able to accept statements.
    This is no longer the case. If you need to pass arguments, just do
    v-on-clickaway="() => away(arg1)".
  3. There is a common issue with dropdowns (and modals) inside an element with
    v-on-clickaway. Some UI libraries chose to implement these UI elements
    by attaching the DOM element directly to the body. This makes clicks on
    a dropped element trigger away handler. To combat that, you have to add
    an extra check in the handler, for where the event originated from.
    See #9 for an example.

License

MIT