前回の記事の続きです。以下について書いていきます。この記事で終わりのはず?
- バリデーション機能(主にIPアドレスのバリデーション追加)
- 画面
バリデーション機能
バリデーション機能は、vee-validateを使用しています。
使い方は以下の通りです。
Nuxt plugins
Nuxtのプラグインとして、以下のように設定しました。以下には”ipaddr”を指定してIPアドレスをバリデーションするためにextend(“ipaddr”)を追加しています。
$ cat plugins/vee-validate.js import Vue from 'vue' import { extend, ValidationProvider, ValidationObserver, localize } from 'vee-validate' import ja from 'vee-validate/dist/locale/ja.json' import { required, email, max } from 'vee-validate/dist/rules' extend('required', required) extend('email', email) extend('max', max) // see: https://teratail.com/questions/231233 import isIP from 'validator/lib/isIP'; const validate_ip = value => isIP(String(value)); extend("ipaddr", { params: [], validate: (value) => { if (validate_ip(value)) { return true; } return false; }, message: "IPAddress must be valid" } ); Vue.component('validation-provider', ValidationProvider) Vue.component('validation-observer', ValidationObserver) localize('ja', ja)
ValidationObserver/ValidationProvider
実際のバリデーションは以下のように設定します。以下はIPアドレスの例です。
ValidationObserverタグの中に、ValidationProviderタグをしているすることでバリデーションします。
“ipaddr”は上記のplugins/vee-validate.js内の指定を使用しています。
<validation-observer ref="validationObserver" tag="div"> <validation-provider v-slot="{ errors }" rules="required|ipaddr" name="ipaddr" > <v-text-field v-model="edituser.ipaddress" label="IPアドレス" :error-messages="errors" /> </validation-provider> .... methods: { async submit (edituser) { const isValid = await this.$refs.validationObserver.validate(); if (!isValid) return false; this.$router.push({ name: 'confirmuser', params: { user: edituser }}) }, }
間違ったIPアドレスを指定すると、以下のようにエラーになります。
画面
以下に画面を貼っていきます。
一覧画面
一覧は、v-data-tableコンポーネントを使用しています。
<v-data-table :headers="headers" :items="users" :items-per-page="10" :search="search" class="elevation-1"
編集画面
フォームは、v-text-fieldを使用しています。
確認画面
完了画面
一覧画面(変更後)
変更後の一覧は以下の通りです。1の名前が変更されていることが分かります。