Задать вопрос
@castetus

Vuelidate — как проверять 2 взаимозависимых чекбокса?

Здравствуйте все, не понимаю как сделать:
Есть 2 чекбокса, условие такое что required минимум один из них (любой)
Т.е. если хотя бы один отмечен, валидация проходит. Если оба, то тоже. Если ни одного, то error.
Как объяснить это vuelidate?
Сейчас сделал вот так:
<template>
    <input type="checkbox" name="life" id="" v-model="life" @change="$v.life.$touch()">
    <label for="life">Жизнь</label>
    <input type="checkbox" name="property" id="" v-model="property" @change="$v.property.$touch()">
    <label for="life">Имущество</label>
</template>

И валидация:
validations() {
    if(!this.property){
      return {
        life: {
          required (val) {
            return val
          }   
        },
      }
    }
    if(!this.life){
      return {
        property: {
          required (val) {
            return val
          }   
        },
      }
    }
  },


По одному работает, если отметить оба, то "Error in v-on handler: "TypeError: Cannot convert undefined or null to object"
Что не так?

И по моему, я вообще не туда куда-то зашел с этим вьюлидейтом.
Может, это все как-то проще делается?
  • Вопрос задан
  • 275 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • HTML Academy
    Vue.js 3 — разработка клиентских приложений
    1 месяц
    Далее
  • Академия Эдюсон
    Frontend-разработчик + ИИ
    9 месяцев
    Далее
  • Stepik
    Frontend разработчик на HTML, CSS и JavaScript
    4 месяца
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
По одному работает, если отметить оба, то "Error in v-on handler: "TypeError: Cannot convert undefined or null to object"

Что возвращает validations, если оба значения true? Ничего. Пусть всегда будет объект:

validations() {
  return {
    life: this.property ? {} : { required: v => v },
    property: this.life ? {} : { required: v => v },
  };
},

<div>STATUS: {{ $v.$invalid ? 'ЖОПА' : 'OK' }}</div>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы