npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vue-conditional-event

v1.0.4

Published

a plugin for make conditional events

Downloads

10

Readme

vue-conditional-event

vue-conditional-event is a directive for let trigger events conditionally.

Why ?

Sometimes we need prevent some events because of validations or rules.

Common approach :

export default {
    methods:{
        validateForm(){
            //...some validation code returns true or false
        },
        submitForm(){
            //actually we can get rid of this "if" block with vue-vce directive
            //check the next example
            if(!this.validateForm()){ 
                return
            }
            //actual submitForm logic code...
        }
    }
}

vue-conditional-event approach:

export default {
    methods:{
        validateForm(){
            //...some validation code returns true or false
        },
        submitForm(){
            //actual submitForm logic code...
        }
    }
}
<!-- if validateForm returns false click will be prevented -->
<button v-vce:click.validateForm="submitForm">Test</button>  

Installation

NPM

$ npm install vue-conditional-event --save

VUE

//Example implementation
import Vue from 'vue'
import App from './App.vue'
import vce from "vue-conditional-event"

Vue.config.productionTip = false
Vue.use(vce)

new Vue({
  render: h => h(App),
}).$mount('#app')

Examples

Basic usage

<!-- if validateForm returns false click will be prevented -->
<button v-vce:click.validateForm="submitForm">Submit Form</button>  

Chained validations You can chain any number of validations.

<!-- if one of them returns false click will be prevented -->
<button v-vce:click.validate1.validate2="submitForm">Submit Form</button>
<button v-vce:click.validate1.validate2.validate3="submitForm">Submit Form</button> 

Async/Sync validations You can chain async and sync functions together.

export default {
    methods:{
        validate(){
            //return true or false
        },
        async asyncValidate(){ 
           await axios.get('[SOME API]') // lets assume it takes 3 seconds 
           //return true or false 
        },
        myMethod(){
            console.log("IT WORKS !")
        }
    }
}
<!-- if both validation returns "true" , after three seconds myMethod will be executed -->
<button v-vce:validate.asyncValidate="myMethod">Test</button>

Passing parameters to method which we wanted to execute after validations

<!-- we need to encapsulate our method with a function to pass parameters -->
<button v-for="(item,$index) in someArray" 
:key="$index" 
v-vce:click.validateFunction="()=> myMethod($index,item)">
Execute My Method
</button>  

How to use $event ? You can access $event as wrapper function's first argument.

<!-- encapsulate again -->
<button v-vce:click.validateFunction="($event)=> myMethod($event)">
Execute My Method
</button>  

Using computed properties and data properties as validation criteria You can also chain computed,data and function validations.

export default {
  data(){
     return {
        isDataCriteriaValid:// true or false
     }
  },
  name: 'HelloWorld',
  methods:{
    validateFunc(){
      return // true or false  
    },
    myMethod(){
      console.log("IT WORKS !")
    }
  },
  computed:{
    isComputedCriteriaValid(){
        return // true or false
    }
  }
}
<!-- you can chain all types of validation together -->
<button v-vce:click.isDataCriteriaValid.isComputedCriteriaValid.validateFunc="myMethod">
Execute My Method
</button>  

Execute child component's emitted event conditionally

//HelloWorld.vue
import someComponent from "./someComponent"
export default {
  components:{
      someComponent
  },
  name: 'HelloWorld',
  methods:{
    isEmittedEventExecutable(){
      return //true or false
    },
    myMethod(eventArgument){
        console.log("IT WORKS !",eventArgument)
    }
  }
}
<!-- someComponent.vue -->
<template>
    <div style="background-color:lightyellow">
        <button @click="$emit('innerevent',{'a':'b'})">inner component</button>
    </div>
</template>
<!-- HelloWorld.vue -->
<div>
<someComponent v-vce:innerevent.isEmittedEventExecutable="($event)=>myMethod($event)" />
</div>

Using with v-on You can still use vce with standart v-on directive if you want, both of them will work.

export default {
  name: 'HelloWorld',
  methods:{
    vceHandler(){
      console.log("vce works !")  
    },
    vonHandler(){
      console.log("v-on works!")
    },
    validate(){
        return //true or false
    }
  }
}
<!-- vceHandler will execute conditionally and vonHandler will execute immediately -->
<button v-vce:click.validate="vceHandler" v-on:click="vonHandler">
Execute My Method
</button>  

Using with promises Promises must resolved with true or false argument.

export default {
  name: 'HelloWorld',
  methods:{
    myMethod(){
      console.log("it works !")  
    },
    promiseValidator(){
        return new Promise((resolve,reject)=>{
            //if validation successfully
            resolve(true)
            //or failed
            resolve(false)
        })
    }
  }
}
<button v-vce:click.promiseValidator="myMethod">
Execute My Method
</button>  

Note

vue-conditional-event supports all native events like click,mouseover,mousemove etc.

License

MIT