VeeValidateのValidation Provideを使ったバリデーションは以前Vue.jsの記事やNuxt.jsの記事を投稿しましたが、今回はフォーム全体のバリデーションができるValidation ObserverをNuxt.jsの環境で使ってみます。
サンプルコード
まずValidation Observer使用前の状況ですが、以前投稿したNuxt.jsの記事にformタグと送信ボタンを追加して、送信時の処理(consoleの表示)をいれています。
<template>
<form v-on:submit.prevent="submit">
<ValidationProvider name="mail" rules="required|email" v-slot="{ errors }">
<input type="email" v-model="mail">
<span>{{ errors[0] }}</span>
</ValidationProvider>
<button type="submit">送信</button>
</form>
</template>
<script>
export default {
data() {
return {
mail: ''
}
},
methods: {
submit() {
console.log(this.mail);
}
}
}
</script>
ここにValidation Observerを設定してみます。
/plugins/vee-validate.jsにValidationObserverの定義を追加します。
import Vue from 'vue'
import { ValidationProvider, ValidationObserver, extend, localize } from 'vee-validate'
import { required, email } from 'vee-validate/dist/rules';
import ja from 'vee-validate/dist/locale/ja.json';
localize('ja', ja);
extend('required', required);
extend('email', email);
Vue.component('ValidationProvider', ValidationProvider);
Vue.component('ValidationObserver', ValidationObserver);
例として、フォーム内の入力値が全て有効になるまで送信ボタンをdisabledになるように設定してみます。
<template>
<validationObserver tag="form" v-slot="{ invalid }" v-on:submit.prevent="submit">
<ValidationProvider name="mail" rules="required|email" v-slot="{ errors }">
<input type="email" v-model="mail">
<span>{{ errors[0] }}</span>
</ValidationProvider>
<button type="submit" :disabled="invalid">送信</button>
</validationObserver>
</template>
<script>
export default {
data() {
return {
mail: ''
}
},
methods: {
submit() {
console.log(this.mail);
}
}
}
</script>
formをvalidationObserverに置き換えましたが、validationObserverはデフォルトだとspanタグになるため、tagプロパティでformタグを指定しています。
コメントが承認されるまで時間がかかります。