vee-validate 個数で制御(enable/disable)

 以下の記事はアメブロで2023-03-16に投稿したものです。


vue-nuxt、vee-validateのV3の環境で
ボタンenable/disableを設定項目が1個以上かどうかで切り替えたい画面があった。
vee-validateには他の項目と連動させる機能があるのだが、どうにも使いづらい。
というかできるのかどうかもよく分からなかった。

なので結局、カスタムルールを作成し、computedで個数を取得して、それをrulesのカスタムルールのパラメータとして渡すことで解決した。
本来の機能でやった方が良いかもしれないが、こういうやり方もあるということでこちらに書くことにした。

xxxx.vue
validation-provider(:immediate="true" vid="enabled" :rules="`XXXX_exist:${xxxxNums}`" v-slot="{errors}" name="XXXXの利用設定")

computed: {
  xxxxNums: {
    get () {
      return this.xxxx.length
    },
  },

plugins/validation.js
extend(
  'xxxx_exist',
  {
    message: (field) => { return field + 'には〇○〇○が必要です。' },
    params: ['num'],
    validate: (enabled, { num }) => {
      return !enabled || parseInt(num)
    },
  },
)

「利用しない」場合、enabledはfalse

利用する/利用しない
というボタンで、ステータス切り替えを行うタイミングで
ある項目が設定されているかチェックして、
更新ボタン
をenable/disableする。
このある項目は追加、削除で個数が上下する、という画面。
もちろん0個もあるので、この場合、この項目を保持していた配列の要素数も0になる。




コメント