Ryu9135のブログ

仕事で学んだことを整理して、ブログに残す。外国人なので日本語が間違っていたら、気軽に指摘ください。

VeeValidateのバリデーション実装する心得

1、VeeValidateとは

  簡単に言うとユーザーによって入力された値が不正な場合に、リアルタイムにエラーを表示させる機能です。

 

2、 簡単な例

 

<validation-observer ref="obs" v-slot="{ invalid }">
    <label>名前</label>
    <validation-provider name="名前" rules="required">
      <div slot-scope="ProviderProps">
        <input v-model="name">
        <p class="error">{{ errors[0] }}</p>
      </div>
   </validation-provider>
</validation-observer>

 

フォーム全体は<validation-observer>タグで囲む、inputのところに<validation-provider>タグで囲む。

 

3、実際のプロジェクトから学んだこと

  上記のように一つ一つのinputをチェックするのが簡単ですが、複数のinputの結果によってバリデーションしたい時にはですが、<validation-provider>タグの中に複数のinputを入れても一番最初のinputだけチェックされている。

*そうしたら、複数のinputのv-modelを結合して、結合したinputに対してバリデーションすればうまくできそうです。ただ、結合したinputにはユーザーに見せてはいけないので、inputにtype = 'hidden'を追加し、また、すごく重要なところですが、<validation-provider>に  : immediate='true' 属性を追加する必要があります。なぜなら、<validation-provider>タグには基本対象のinputがフォーカスされた時点から効くらしいですので、inputにtype = 'hidden'を追加したため、当然ユーザーがそのinputをクリックできないです。:immediate を追加すると、つまりすぐ効いてくださいみたいな命令ですね。しかし、そうすると、イニシャル画面で、エラーメッセージが表示されることになってしまいました。