環境情報

Vuetify 組み込みバリデーションを使用する場合

以前よりコンポーネントライブラリ Vuetify と組み合わせて使用しています。

Vuetify は組み込みのバリデーション機構を持っています。

こちらはAWSアカウントIDとバケット名を検査するフォームの例です (本当はもっと細かいバリデーションが必要ですが、あくまでも簡易的なものということで…)。

**https://github.com/teknocat/veevalidate-test/blob/master/src/components/VuetifyForm.vue**

VuetifyForm.vue

<template>
  <v-form
    ref="form"
    v-model="valid"
  >
    <v-text-field
      v-model="awsAccountId"
      :rules="[rules.required, rules.awsAccountId]"
      label="AWSアカウントID"
      required
    ></v-text-field>

    <v-text-field
      v-model="bucketName"
      :rules="[rules.required, rules.bucketName]"
      label="バケット名"
      required
    ></v-text-field>

    <v-btn
      :disabled="!valid"
      color="success"
      class="mr-4"
      @click="submit"
    >
      Submit
    </v-btn>
  </v-form>
</template>

<script>
export default {
  name: 'VuetifyForm',
  data: () => ({
    valid: true,
    awsAccountId: '',
    bucketName: '',
    rules: {
      required: (value) => !!value || '必須項目です',
      awsAccountId: (value) => {
        return /^[0-9]{12}$/.test(value) || 'AWSアカウントID は12桁の数値です';
      },
      bucketName: (value) => {
        return /^[a-z0-9.-]{3,63}$/.test(value) || 'バケット名 のフォーマットが正しくありません';
      },
    },
  }),
  methods: {
    submit () {
      const result = this.$refs.form.validate();
      console.log('submit', result);
    },
  },
}
</script>

バリデーション動作はするのですが、以下のようなつらみがありました。

VeeValidate を使用する場合