vue-mandatory
Simple and easy Vue.js directive for form validation.
Steps
- Install it
npm install --save vue-mandatory
yarn add vue-mandatory
- Import the library and use it as Vue plugin.
import vueMandatory from 'vue-mandatory'
Vue.use(vueMandatory)
- Basic usage.
- Use the directive v-mandatory in your HTML form elements.
- The directive v-mandatory receive an object as value.
- Mandatory each HTML form element must have an id property setted.
- Optional params:
- msg: String type. Is the message displayed if an element is required. If the msg is not supplied, the default value is
${elementId} is required
- len: Number type. Is the minimum length required. Apply only for inputs. If the len is not supplied, the default value is 1.
- pattern: Regex type. If a pattern is setted the input value must match the pattern for be valid.
- inputClasses: Array of clases that will be apply to the input element in case of non-compliance.
- warningClasses: Array of clases that will be apply to message element in case of non-compliance. The message element is build with an p tag and is append below the input element.
- msg: String type. Is the message displayed if an element is required. If the msg is not supplied, the default value is
- You can assing an object, with the custom fields, as value of the v-mandatory directive such as the email and password inputs in the following example.
- You can assign custom values directly such as username input.
- or only use without values such as gender select. In this way you will get the defaults values based on TailwindCSS for the styles.
<template> ... <div class="mb-4"> <label class="block text-grey-darker text-sm font-bold mb-2" for="username"> Username label> <input class="shadow appearance-none border rounded w-full py-2 px-3 text-grey-darker leading-tight focus:outline-none focus:shadow-outline" id="username" type="text" placeholder="jhonDoe" v-model="form.username" v-mandatory="{ msg: 'My custom message here', len: 5, pattern: /[a-zA-Z]{5, 10}/i inputClasses: ['error'], warningClasses: ['background-red', 'text-bold'] }"/> div> <div class="mb-4"> <label class="block text-grey-darker text-sm font-bold mb-2" for="email"> Email label> <input class="shadow appearance-none border rounded w-full py-2 px-3 text-grey-darker leading-tight focus:outline-none focus:shadow-outline" id="email" type="email" placeholder="[email protected]" v-model="form.email" v-mandatory="{ inputClasses: validate.inputClasses, warningClasses: validate.warningClasses, ...validate.email }" /> div> <div class="mb-6"> <label class="block text-grey-darker text-sm font-bold mb-2" for="password"> Password label> <input class="shadow appearance-none border rounded w-full py-2 px-3 text-grey-darker leading-tight focus:outline-none focus:shadow-outline" id="password" type="password" placeholder="******************" v-model="form.password" v-mandatory="{inputClasses: validate.inputClasses, warningClasses: validate.warningClasses, ...validate.password}" /> div> <div class="mb-6"> <label class="block text-grey-darker text-sm font-bold mb-2" for="password"> Gender label> <select class="shadow appearance-none border rounded w-full py-2 px-3 text-grey-darker leading-tight focus:outline-none focus:shadow-outline" id="gender" v-model="form.gender" v-mandatory> <option value="">Choose oneoption> <option value="male">Maleoption> <option value="female">Femaleoption> <option value="other">Otheroption> select> div> ... template> <script> export default { ..., data () { return { validate: { email: { msg: 'The Email Field is required', pattern: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i }, password: { msg: 'Password is mandatory', len: 6 }, gender: { msg: 'Choose one gender' }, inputClasses: ['border-red'], warningClasses: ['mt-3', 'text-red', 'text-xs', 'italic'] } } }, ... } script>