Добавить пользовательский валидатор, который применяется только к первому элементу $ each в vuelidate - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь использовать Vuelidate для контроля ввода моей формы.Я предоставляю поле ввода для firstname, lastname, nationality и age клиента.

В моем приложении необходимо проверить, находится ли первый клиент наминимум 18 лет.

Я пытался сделать следующее:

validations: {
        customers: {
            $each: {
                firstName: { required, minLength: minLength(2), maxLength: maxLength(35) },
                lastName: { required, minLength: minLength(2), maxLength: maxLength(35) },
                nationality: { required }, 
                age: {
                    isFirstCustomerValid: (value) => {
                        return value >= 18
                    }
                }
            }
        }
    }

Теперь проблема в том, что это относится ко всем клиентам, которые не предназначены.Есть ли способ получить доступ только к первому элементу свойства $ each?

1 Ответ

0 голосов
/ 05 июля 2019

Вы можете попробовать найти индекс клиента двумя способами:

  • Если у вашего клиента есть уникальный идентификатор, используйте:

      const customerIndex = this.customers.findIndex(c => c.id === customer.id)
    
  • Если нет, вы можете попробовать использовать метод Лодаша isEqual

    const customerIndex = this.customers.findIndex(c => _.isEqual(c, customer))
    

Пример кода:

validations: {
  customers: {
      $each: {
          firstName: { required, minLength: minLength(2), maxLength: maxLength(35) },
          lastName: { required, minLength: minLength(2), maxLength: maxLength(35) },
          nationality: { required }, 
          age: {
              isFirstCustomerValid: (value, customer) => {
                 // if your customer has valid unique id, you can find it by findIndex
                const customerIndex = this.customers.findIndex(c => c.id === customer.id)

                 // OR you ccan try lodash library 'isEqual' method (https://lodash.com/docs/4.17.11#isEqual)
                const customerIndex = this.customers.findIndex(c => _.isEqual(c, customer))

                return customerIndex || value >= 18
              }
          }
      }
  }
}
...