Vuetifyのフォームコンポーネントでバリデーションを行う
前提
- vue@2.6.14
- vuetify 2.6.2
どうやって実装した?
VuetifyのフォームコンポーネントにあるRulesプロパティを使った。 Rulesプロパティはルールの規則が格納された配列を指定した。 この指定したルールをもとにバリデーションを行ってくれる仕組みになっている。
コード例
実際に書いてみたコード。
HTML
<template lang="pug"> v-container.ma-0.pa-0 v-row( justify='center' align='center' ) v-col(cols='12' xs='12' sm='5') v-text-field( hint='下限' dense v-on:input="emitLowerValue" v-bind:id="idName + '-lower-value'" :rules="rules" ) (省略) </template>
伝えたい部分は:rules="rules"
の部分。
フォームコンポーネントのプロパティ:rules
にルールの配列rules
を格納。
ルールの配列はScriptの部分で定義していく。
Script
computed: { rules: function() { const rules = [] const rule = v => !v || !isNaN(v) || `数値のみ有効` rules.push(rule) if (this.idName.match(/price|sigmahat/)) { const rule = v => !v || !(Math.sign(v) === -1) || `正の数のみ有効` rules.push(rule) } if (this.idName.match(/probability/)) { const rule = v => !v || !(Math.abs(v) > 50) || `-50~50のみ有効` rules.push(rule) } return rules } },
computed(算出プロパティ)にルールの配列を返す関数を定義することで フォームから入力された値が変わるたびに、バリデーションを行う仕組みになっている。
ruleは関数として定義して、引数v
は入力値である。
伝えたい部分はv => !v || !isNaN(v) || '数値のみ有効'
の部分。
条件1 || 条件2 || 文言
のような形でルールを定義する。
条件1を満たさず、さらに条件2も満たさない場合はバリデーションエラーとしてフォーム上に文言を注意喚起するという感じ。
(||
はまたはなのでtrue
が出現しない限り評価されるという規則を使っているよう。)
入力値がnullではなく、数値でもない場合は、数値を入力するように注意喚起するルールの例になる。
参照情報
Vuetify公式リファレンス(フォームコンポーネント)
あとは、$v
とか$touch
などわからない変数はvue.jsの公式リファレンスを読んでなんとか理解していった感じです。