UNPKG

vee-validate

Version:
182 lines (127 loc) 5.41 kB
<p align="center"> <a href="https://vee-validate.logaretm.com" target="_blank"> <img src="https://raw.githubusercontent.com/logaretm/vee-validate/main/logo.png" width="200" title="Go to website"> </a> </p> <p align="center"> Painless Vue forms </p> <p align="center"> <a target="_blank" href="https://www.npmjs.com/package/vee-validate"> <img src="https://img.shields.io/npm/v/vee-validate.svg?label=&color=05bda8"> </a> <a target="_blank" href="https://npm-stat.com/charts.html?package=vee-validate"> <img src="https://img.shields.io/npm/dm/vee-validate.svg?color=05bd6d&label="> </a> <a href="https://vee-validate.logaretm.com/v4/" target="_blank"> <img src="https://img.shields.io/badge/-docs%20and%20demos-009f53"> </a> <a href="https://github.com/sponsors/logaretm"> <img src="https://img.shields.io/badge/-%E2%99%A5%20Sponsors-ec5cc6"> </a> </p> <br> <p align="center"> <a href="https://github.com/sponsors/logaretm"> <img src='https://sponsors.logaretm.com/sponsors.svg'> </a> </p> <br> ## Features - **🍞 Easy:** Declarative validation that is familiar and easy to setup - **🧘‍♀️ Flexible:** Synchronous, Asynchronous, field-level or form-level validation - **⚡️ Fast:** Build faster forms faster with intuitive API and small footprint - **🏏 Minimal:** Only handles the complicated form concerns, gives you full control over everything else - **😎 UI Agnostic:** Works with native HTML elements or your favorite UI library components - **🦾 Progressive:** Works whether you use Vue.js as a progressive enhancement or in a complex setup - **✅ Built-in Rules:** Companion lib with 25+ Rules that covers most needs in most web applications - **🌐 i18n:** 45+ locales for built-in rules contributed by developers from all over the world ## Getting Started ### Installation ```sh # Install with yarn yarn add vee-validate # Install with npm npm install vee-validate --save ``` ### Vue version support The main v4 version supports Vue 3.x only, for previous versions of Vue, check the following the table | vue Version | vee-validate version | Documentation Link | | ----------- | -------------------- | ---------------------------------------------------------------------------------------- | | `2.x` | `2.x` or `3.x` | [v2](https://vee-validate.logaretm.com/v2) or [v3](https://vee-validate.logaretm.com/v3) | | `3.x` | `4.x` | [v4](https://vee-validate.logaretm.com/v4) | ### Usage vee-validate offers two styles to integrate form validation into your Vue.js apps. #### Composition API If you want more fine grained control, you can use `useField` function to compose validation logic into your component: ```vue <script setup> // MyInputComponent.vue import { useField } from 'vee-validate'; const props = defineProps<{ name: string; }>(); // Validator function const isRequired = value => (value ? true : 'This field is required'); const { value, errorMessage } = useField(props.name, isRequired); </script> <template> <input v-model="value" /> <span>{{ errorMessage }}</span> </template> ``` Then you can you can use `useForm` to make your form component automatically pick up your input fields declared with `useField` and manage them: ```vue <script setup> import { useForm } from 'vee-validate'; import MyInputComponent from '@/components/MyInputComponent.vue'; const { handleSubmit } = useForm(); const onSubmit = handleSubmit(values => { // Submit to API console.log(values); // { email: 'email@gmail.com' } }); </script> <template> <form @submit="onSubmit"> <MyInputComponent name="email" /> </form> </template> ``` You can do so much more than this, for more info [check the composition API documentation](https://vee-validate.logaretm.com/v4/guide/composition-api/validation/). #### Declarative Components Higher-order components are better suited for most of your cases. Register the `Field` and `Form` components and create a simple `required` validator: ```js import { Field, Form } from 'vee-validate'; export default { components: { Field, Form, }, methods: { isRequired(value) { return value ? true : 'This field is required'; }, }, }; ``` Then use the `Form` and `Field` components to render your form: ```vue <Form v-slot="{ errors }"> <Field name="email" :rules="isRequired" /> <span>{{ errors.email }}</span> </Form> ``` The `Field` component renders an `input` of type `text` by default but you can [control that](https://vee-validate.logaretm.com/v4/api/field#rendering-fields) ## 📚 Documentation Read the [documentation and demos](https://vee-validate.logaretm.com/v4). ## Contributing You are welcome to contribute to this project, but before you do, please make sure you read the [contribution guide](/CONTRIBUTING.md). ## Credits - Inspired by Laravel's [validation syntax](https://laravel.com/docs/5.4/validation) - v4 API Inspired by [Formik's](https://github.com/formium/formik) - Logo by [Baianat](https://github.com/baianat) ## Emeriti Here we honor past contributors and sponsors who have been a major part on this project. - [Baianat](https://github.com/baianat). ## ⚖️ License Released under [MIT](/LICENSE) by [@logaretm](https://github.com/logaretm).