VeeValidateのValidation Observerを使ってみる

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タグを指定しています。

参考サイト

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2024年4月
 123456
78910111213
14151617181920
21222324252627
282930