This page will help you integrate FormValidation with the
Vue framework. For the sake of simplicity, we are about to validate a simple login form with just two fields to input the username and password:
<form id="loginForm" method="POST">
<div class="form-group row">
<label class="col-sm-3 col-form-label">Username</label>
<div class="col-sm-4">
<input type="text" class="form-control" name="username" />
</div>
</div>
<div class="form-group row">
<label class="col-sm-3 col-form-label">Password</label>
<div class="col-sm-4">
<input type="password" class="form-control" name="password" />
</div>
</div>
<div class="form-group row">
<div class="col-sm-9 offset-sm-3">
<button type="submit" class="btn btn-primary">Login</button>
</div>
</div>
</form>
Bundling the library
First of all, you need to look at the following guide to see how we can bundle FormValidation with popular bundlers:
Creating a FormValidation instance
The best place to initialize a FormValidation instance is inside the component's
mounted event:
// LoginForm.vue
<template>
</template>
<script>
import { formValidation } from '@form-validation/bundle/popular';
module.exports = {
mounted: function() {
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
username: {
validators: {
notEmpty: {
message: 'The username is required'
},
stringLength: {
min: 6,
max: 30,
message: 'The username must be more than 6 and less than 30 characters long',
},
regexp: {
regexp: /^[a-zA-Z0-9_]+$/,
message: 'The username can only consist of alphabetical, number and underscore',
},
}
},
password: {
validators: {
notEmpty: {
message: 'The password is required'
},
stringLength: {
min: 8,
message: 'The password must have at least 8 characters',
},
}
},
},
plugins: {
...
},
});
},
};
</script>
Using the plugins
In order to use the
plugins, we need to import them:
import { formValidation } from '@form-validation/bundle/popular';
import { Icon } from '@form-validation/plugin-icon';
import { Trigger } from '@form-validation/plugin-trigger';
import { Bootstrap } from '@form-validation/plugin-bootstrap';
import { SubmitButton } from '@form-validation/plugin-submit-button';
module.exports = {
mounted: function() {
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
...
},
plugins: {
trigger: new Trigger(),
bootstrap: new Bootstrap(),
icon: new Icon({
valid: 'fa fa-check',
invalid: 'fa fa-times',
validating: 'fa fa-refresh'
}),
submitButton: new SubmitButton(),
},
});
},
};
Now the FormValidation instance is ready, you can listen on the
events or call
API:
this.fv.on('core.field.invalid', (e) => {
...
});
this.fv.revalidateField('...');
Registering validator
You don't need to follow this section if you are using a
popular validator. The popular validator is ready when you import the FormValidation's core:
import { formValidation } from '@form-validation/bundle/popular';
import { phone } from '@form-validation/validator-phone';
import strongPassword from '/path/to/your/strongPassword';
module.exports = {
mounted: function() {
this.fv = formValidation(document.getElementById('loginForm'), {
fields: {
phoneNumber: {
validators: {
phone: { ... }
}
},
password: {
validators: {
checkPassword: { ... }
}
},
},
});
this.fv.registerValidator('phone', phone)
.registerValidator('checkPassword', strongPassword);
},
};
Destroying FormValidation instance
Vue component triggers the
beforeDestroy event when it's removed from page or not used anymore. It's the time to destroy our FormValidation instance by using the
destroy() method:
module.exports = {
beforeDestroy: function () {
if (this.fv) {
this.fv.destroy();
}
},
};
See also