Install vuelidate
npm install vuelidate --save
Create Form Component
<template> <div> <b-form ref="form" @submit.prevent="submit"> <b-form-group label="Name" label-for="input-name" invalid-feedback="Name is required" > <b-form-input :state="validateState($v.item.name)" id="input-name" v-model="$v.item.name.$model" ></b-form-input> </b-form-group> <b-button type="submit" variant="primary">Submit</b-button> </b-form> </div></template><script>import { validationMixin } from "vuelidate"import { required, minLength } from "vuelidate/lib/validators"export default { mixins: [validationMixin], // props: ['item'], data() { item: { name: 'Desmond' }, }, validations: { item: { name: { required }, } }, methods: { validateState(item) { const { $dirty, $error } = item return $dirty ? !$error : null }, submit() { this.$v.item.$touch() if (this.$v.item.$anyError) return false console.log(this.item) alert("Form submitted!") } }}</script>
References: