VeeValidate is not included in Buefy, you have to install it:
npm install vee-validate
<template>
<section>
<form @submit.prevent="validateBeforeSubmit">
<b-field label="First name"
:type="{'is-danger': errors.has('firstname')}"
:message="errors.first('firstname')">
<b-input v-model="firstname" name="firstname" v-validate="'required'" />
</b-field>
<b-field label="Last name"
:type="{'is-danger': errors.has('lastname')}"
:message="errors.first('lastname')">
<b-input v-model="lastname" name="lastname" v-validate="'required'" />
</b-field>
<b-field label="Age"
:type="{'is-danger': errors.has('age')}"
:message="errors.first('age')">
<b-input type="number" v-model="age" name="age" v-validate="'required|integer|between:18,65'" />
</b-field>
<b-field label="Gender"
:addons="false"
:type="{'is-danger': errors.has('gender')}"
:message="errors.first('gender')">
<b-radio v-model="gender" name="gender" native-value="M" v-validate="'required'">
Male
</b-radio>
<b-radio v-model="gender" name="gender" native-value="F" v-validate="'required'">
Female
</b-radio>
</b-field>
<b-field label="Username"
:type="{'is-danger': errors.has('username')}"
:message="errors.first('username')">
<b-input type="text" v-model="username" name="username" v-validate="'required|alpha'" />
</b-field>
<b-field label="Password"
:type="{'is-danger': errors.has('password')}"
:message="errors.first('password')">
<b-input type="password" v-model="password" name="password" v-validate="'required|min:8'" />
</b-field>
<b-field label="Confirm password"
:type="{'is-danger': errors.has('confirm-password')}"
:message="[{
'The confirm password field is required' : errors.firstByRule('confirm-password', 'required'),
'The confirm password is not valid' : errors.firstByRule('confirm-password', 'is')
}]">
<b-input type="password" v-model="confirmPassword" name="confirm-password"
v-validate="{ required: true, is: password }" />
</b-field>
<b-field label="Where did you find us ?"
:type="{'is-danger': errors.has('question')}"
:message="errors.first('question')">
<b-select v-model="question" name="question" placeholder="Select an option" v-validate="'required'">
<option value="google">Google</option>
<option value="github">Github</option>
<option value="other">Other</option>
</b-select>
</b-field>
<b-field label=""
:type="{'is-danger': errors.has('flag-terms')}"
:message="{'Please check this box to proceed' : errors.firstByRule('flag-terms', 'required')}">
<b-checkbox v-model="flagTerms" name="flag-terms" v-validate="'required:false'">
I agree to the terms and conditions
</b-checkbox>
</b-field>
<button type="submit" class="button is-primary"> Submit </button>
</form>
</section>
</template>
<script>
import Vue from 'vue'
// You have to install VeeValidate to use it:
// 'npm install vee-validate'
import VeeValidate from 'vee-validate'
Vue.use(VeeValidate, {
events: ''
})
export default {
data() {
return {
firstname: null,
lastname: null,
age: null,
username: null,
password: null,
confirmPassword: null,
gender: null,
question: null,
flagTerms: false
}
},
methods: {
validateBeforeSubmit() {
this.$validator.validateAll().then((result) => {
if (result) {
this.$buefy.toast.open({
message: 'Form is valid!',
type: 'is-success',
position: 'is-bottom'
})
return;
}
this.$buefy.toast.open({
message: 'Form is not valid! Please check the fields.',
type: 'is-danger',
position: 'is-bottom'
})
});
}
}
}
</script>
This page is open source. Noticed a typo or something's unclear?