Giter Site home page Giter Site logo

vue-debounce's Introduction

vue-debounce

npm Downloads David David

A simple to use directive for debounce solutions

It attaches itself to an event for actions

JavaScript Style Guide

Content

Features

  • Dynamic debouncing for input based requests
  • Easy to use, just place it into your vue instance and attach it to your inputs/components
  • Self regulating no need to worry about it, set it and forget it
  • Multiple time formats supported (miliseconds and seconds)
  • Enter key support to automatically fire the desired function when the user hits the enter key in the desired input (Can also be disabled)
  • Supports the ability to have multiple event listeners, and specify events at the element level

Installation

npm i vue-debounce

Modifiers

  • lock : Used to lock the debounce and prevent the enter key from triggering the function when pressed
    • Example: v-debounce:400ms.lock="cb"
  • unlock : Used to unlock the enter key on a debounced input, useful if you want to use the lock option and only want a few debounced inputs unlocked
  • fireOnEmpty : Use to signify that when that specific input is emptied, you want the function to fire right away
  • cancelOnEmpty : Use this to specify that when the input is emptied you DO NOT want your debounced function to trigger at all

Options

  • lock : Boolean - This works the same way as the modifier does, however using the option will lock ALL of the debounced inputs within that vue instance, where as using the modifer only locks the one it's attached to
  • listenTo : String|Array - Allows you to set a custom event attached to an element like input for example
    • This is given to the addEventListener method attached to the element
  • defaultTime : String - Set the default timer for debounce directives that you don't give a time to
  • fireOnEmpty : Boolean - Tells debounce that if the input is empty, then fire the function immediately

Option Defaults

{
  lock: false,
  listenTo: 'keyup',
  defaultTime: '300ms',
  fireOnEmpty: false
}

Usage

First make sure we tell vue to use it

import Vue from 'vue'
import vueDebounce from 'vue-debounce'

Vue.use(vueDebounce)

// Or if you want to pass in the lock option
Vue.use(vueDebounce, {
  lock: true
})

// Setting a different event to listen to
Vue.use(vueDebounce, {
  listenTo: 'input'
})

// Listening to multiple events
Vue.use(vueDebounce, {
  listenTo: ['input', 'keyup']
})

// Setting a default timer This is set to '300ms' if not specified
Vue.use(vueDebounce, {
  defaultTime: '700ms'
})

Then attach a time:format to the directive, and set the value to the function you want to call and attach it to your input element

Example:

<input v-debounce:300ms="myFunc" type="text" />

If no wait timer is passed in, then the directive will default to whatever you set defaultTime to, OR 300ms if that isn't set.

You can pass the time in multiple formats:

<!-- If no time format is attached ms is used -->
<input v-debounce:300="myFunc" type="text" />

<!-- Seconds format is supported -->
<input v-debounce:1s="myFunc" type="text" />

<!-- Using Modifiers locking the input so the enter key isn't registered -->
<input v-debounce:1s.lock="myFunc" type="text" />

<!-- Using Modifiers unlocking the input so the enter key is registered -->
<!-- If you've set lock to true as an option when adding this module -->
<input v-debounce:1s.unlock="myFunc" type="text" />

The value of the input is passed along to your function as the first parameter, and the 2nd parameter is the event object itself.

Overwriting Events

As of Version 1.2.0 you can assign specific event listeners to specific inputs. Doing so overwrites ANY of the listed events set with listenTo

Example:

// This can accept an array or a single string when using the bind `:` syntax
<input v-debounce:1s="myFunc" :debounce-events="['click', 'keydown']">
<input v-debounce:1s="myFunc" :debounce-events="'click'">

// You can also just use it as an attribute, though if passing multiple events binding it is preferred
<input v-debounce:1s="myfunc" debounce-events="click">

A full example:

<template>
  <input v-debounce:400ms="myFn" type="text" />
  <input v-debounce:400ms="myFn" debounce-events="click" type="text" />
</template>
<script>
export default {
  methods: {
    myFn(val, e) {
      console.log(val) // => The value of the input
      console.log(e) // => The event object
    }
  }
}
</script>

Using Just Debounce

With Vue-debounce you're also able to just use the debouncing function.

Simply require the debounce file.

import { debounce } from 'vue-debounce'

The debounce function returns a function back which in turn is debounced, so you can set them up ahead of time, or just double call the function like so:

const dFn = debounce(val => console.log('normal format', val), '400ms')

dFn(10) // => 'normal format' 10
// Or
debounce(val => console.log('just a number!'), 400)(10) // => 'just a number!' 10

Typescript Support

While this project is not written in typescript, we do define types in the types directory. Unfortunately the way Vue is currently typed the only type support you will get is when you Vue.use(vueDebounce).

i.e.

import Vue from 'vue'
import vueDebounce, { PluginConfig, debounce } from 'vue-debounce'

debounce(() => console.log('just a number!'), 400)
debounce(() => console.log('normal format'), '400ms')

Vue.use<PluginConfig>(vueDebounce, { lock: true, defaultTime: '400ms', listenTo: 'keyup' })

Hopefully in the future Vue will allow directives to type the modifiers and values that are accepted.

vue-debounce's People

Contributors

bobvandevijver avatar dhershman1 avatar enzonotario avatar ilyasfoo avatar itmayziii avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.