Nuxt.jsでVeeValidateを使う際に少し詰まる点があったので、設定方法をメモしておきます。
設定方法
Nuxt.jsの環境準備後、VeeValidateをインストールします。
npm install vee-validate --save
pluginsディレクトリにvee-validate.jsを作成します。
import Vue from 'vue' import { ValidationProvider, extend } from 'vee-validate' // バリデーションルールを追加 extend('test', { validate: value => value === 'test', message: 'test 以外の入力はエラーになります。' }); Vue.component('ValidationProvider', ValidationProvider);
nuxt.config.jsのpluginsプロパティにファイルパスを追加します。
export default { plugins: [ '@/plugins/vee-validate' ] }
これで設定が一通り完了したので、実際に試してみます。
<template> <ValidationProvider rules="test" v-slot="{ errors }"> <input v-model="email" type="email" /> <span>{{ errors[0] }}</span> </ValidationProvider> </template> <script> export default { data() { return { email: '' } } } </script>
これで「test」以外を入力した場合はエラーが表示されるように設定できました。
次にライブラリ側で用意されているルールを使ってみます。
plugins/vee-validate.jsを以下に変更します。
import Vue from 'vue' import { ValidationProvider, extend } from 'vee-validate' import { required, email } from 'vee-validate/dist/rules'; extend('required', required); extend('email', email); Vue.component('ValidationProvider', ValidationProvider);
requiredとemailのルールを追加しました。
上記で指定したrules.jsはNuxt.jsでトランスパイル対象になっていないため、nuxt.config.jsのtranspileのリストにrules.jsのパスを追加する必要があります。
export default { plugins: [ '@/plugins/vee-validate' ], build: { transpile: [ "vee-validate/dist/rules" ] } }
最後に、今回追加したrequiredとemailのルールを設定します。
<template> <ValidationProvider name="mail" rules="required|email" v-slot="{ errors }"> <input v-model="email" type="email" /> <span>{{ errors[0] }}</span> </ValidationProvider> </template> <script> export default { data() { return { email: '' } } } </script>
これでライブラリ側で用意されたルールでバリデーションされるように設定できました。
最後に日本語対応を行ってみます。
plugins/vee-validate.jsを以下に変更します。
import Vue from 'vue' import { ValidationProvider, 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);
これで日本語のエラーメッセージが表示されるようになりました。
コメントが承認されるまで時間がかかります。