Form Wrapper
The FormWrapper component is used to pass a validator object to all error extractor elements inside it, no matter how deeply nested.
This works with both the Single Error Extractor and the Multi Error Extractor, allowing the user to skip passing the validator object to each form field. You can even skip passing the attribute property as it can be extracted automatically.
Preparation
You need to register the FormWrapper as a new Vue component. How you name it is up to you.
import { templates } from 'vuelidate-error-extractor'
// This will register the component globally
Vue.component('FormWrapper', templates.FormWrapper)
You can also register the FormWrapper component locally just for a component.
import { templates } from 'vuelidate-error-extractor'
export default {
components: {
FormWrapper: templates.FormWrapper
}
}
Reusable Attributes
To benefit from automatic attribute extraction, define an attributes option in your Vuelidate-error-extractor initial setup.
That way fields with the same name like email or name can get automatically replaced with E-mail or User Name in your error messages.
Usage
<template>
<div>
<form-wrapper :validator="$v.form" :messages="localMessages">
<form-errors/>
<form-group name="name">
<input type="text" v-model="form.name">
</form-group>
<form-group name="email">
<input type="email" v-model="form.email">
</form-group>
</form-wrapper>
</div>
</template>
<script>
import { required, email } from "vuelidate/lib/validators";
export default {
data() {
return {
form: {
name: "",
email: ""
},
localMessages: {
email: '{attribute} is not a proper email, you should check it again.'
}
};
},
validations: {
form: {
name: { required },
email: { required, email }
}
}
};
</script>
You have to pass the validator prop which is your form object's Vuelidate validation.
Its a good practice to wrap your forms in an object like so:
export default {
data() {
return {
form: {
name: '',
email: ''
}
}
},
validations: {
form: {
name: { required },
email: { required, email }
}
}
}
By adding a messages prop, you can override the globally defined messages.
Single Error Extractor
The singleErrorExtractor requires а name prop to be passed when used with the FormWrapper. The name prop is a string, equal to that field's key inside the form object, essentially the one that we are binding v-model to.
That way the singleErrorExtractor can reach into the FormWrapper and get the appropriate validations.
Bonus
When you add the name prop, the attribute placeholder inside error messages is extracted from the attributes global object.
Multi Error Extractor
When the MultiErrorExtractor is used inside the FormWrapper, it requires no props what so ever. The validator prop is injected automatically.
How it works
The FormWrapper is a component that has no markup, just a slot that renders everything passed to it.
It expects one prop, validator that it passes down to all the error extractor components via the provide/inject API.