Vue.js(TypeScript)でvalidation

Vue.js(TypeScript) のプロジェクトで validation を行いたい。
表示はcss フレームワーク Bulma を拡張したUIコンポーネントの Buefy を使う。
validation には VeeValidation を使う。

パッケージのインストール

$ npm install -D buefy node-sass sass-loader vee-validate

buefy を使う

buefyのアイコンを使うので、index.htmlに下記追加。

 <link rel="stylesheet" href="//cdn.materialdesignicons.com/2.0.46/css/materialdesignicons.min.css">

VeeValidate を使う

<template>
  <div>
    <b-field label="メールアドレス"
      :type="errors.has('email') ? 'is-danger': ''"
      :message="errors.has('email') ? errors.first('email') : ''">
        <b-input
            name="email"
            v-model="email"
            v-validate="'required|email'"
            placeholder="メールアドレス">
        </b-input>
    </b-field>
  </div>
</template>
・・・
<script lang="ts">
import Vue from "vue";
import Buefy from "buefy";
import VeeValidate from "vee-validate";

Vue.use(Buefy);
Vue.use(VeeValidate);
・・・

VeeValidate を日本語化

エラーメッセージが英語なので日本語化する。
ローカライズ用のメッセージファイルの読込と、フィールド名の日本語化を行う。

・・・
        <b-input
            name="email"
            v-model="email"
            v-validate="'required'"
            data-vv-as="メールアドレス"
            placeholder="メールアドレス">
・・・
<script lang="ts">
import Vue from "vue";
import Buefy from "buefy";
import VeeValidate, { Validator } from "vee-validate";
// @ts-ignore: implicitly has an 'any' type.
import VeeValidateJa from "vee-validate/dist/locale/ja";

Vue.use(Buefy);
Validator.localize("ja", VeeValidateJa);
Vue.use(VeeValidate);
・・・

フィールド名の日本語化は、data-vv-as を追加してフィールドごとに対応。
attributesファイルを用意しても出来るようです。
https://baianat.github.io/vee-validate/guide/localization.html#aliases

メッセージファイルの読込でエラーが出たので、ts-ignoreで対応、、、

入力チェックのタイミングを変更

メールアドレスのチェックなどで入力を始めるといきなりエラーとなるので、入力チェックを行うタイミングをフォーカスが外れた時にする。

Vue.use(VeeValidate, {
  events: "blur"
});

ボタンクリックなどで入力チェック

ログイン処理など実際にはボタンクリックなどで全体の入力チェックを行うと思うので、その方法。

・・・
<a class="button is-primary is-fullwidth" @click="login()">ログイン</a>
・・・
  methods: {
    login() {
      this.$validator
        .validateAll()
        .then(result => {
          if (!result) {
            console.log(this.$validator.errors.all());
            return;
          }
        })
        .catch(() => {
          console.log(this.$validator.errors.all());
        });
    }
  }

入力チェックでエラーがあってもcatchではなくthenが呼ばれる。入力エラーがあるかはresultで判定する。

コメントを残す

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

CAPTCHA