ポイント
<v-form>
を利用する- dataでバリデーションチェック内容 (
rules
とする)を定義する - 各入力項目の
:rules
に上で定義したルールを配列で指定する - 送信時にバリデーションチェックを行う
コード
<template>
<v-form ref="form" lazy-validation>
<v-text-field
v-model="form.name"
label="お名前 (*)"
:rules="[rules.required]"
>
</v-text-field>
<v-text-field
v-model="form.email"
label="メールアドレス (*)"
:rules="[rules.required, rules.email]"
>
</v-text-field>
<v-text-field
v-model="form.tel"
label="電話番号 (*)"
:rules="[rules.required, rules.tel]"
>
<v-textarea
v-model="form.note"
label="備考"
:rules="[rules.max]"
counter="100"
></v-textarea>
<v-btn @click=submit>送信する</v-btn>
</v-form>
</v-row>
</v-container>
</template>
<script>
export default {
mounted() {
// バリデーションをリセット
this.$refs.form.resetValidation()
},
data () {
return {
form: {
name: "",
email: "",
tel: "",
note: "",
},
valid: true,
rules: {
required: value => !!value || '入力してください',
email: value => /.+@.+\\..+/.test(value) || 'メールアドレスの形式が正しくありません',
tel: value => /^(0[5-9]0[0-9]{8}|0[1-9][1-9][0-9]{7})$/.test(value.replace(/[━.*‐.*―.*-.*\-.*ー.*\-]/gi, ''))|| '電話番号の形式が正しくありません',
max: value => (value && value.length <= 100) || '100文字以下で入力してください',
},
}
},
methods: {
submit () {
// バリデーションチェック
if(this.$refs.form.validate()) {
// 送信処理
// (...省略)
// 入力値を初期化する
this.$refs.form.reset()
}
},
},
}
</script>
補足
<v-form>
にアクセスするため、ref属性
で名前をつけること- 例えば
<v-form ref="form1">
の場合、this.$refs.form1
でアクセスできる
- 例えば
submit
メソッドのthis.$refs.form.validate()
がtrueの場合、送信処理が走る
Nuxt.jsのプロジェクトで、Vuetifyを使用して
フォームバリデーションをしてみたときのメモ