Валидация на стороне клиента

Element Plus предоставляет мощный набор компонентов и утилит для организации валидации форм на стороне клиента, что позволяет обеспечить корректность данных до их отправки на сервер. Основным элементом является компонент ElForm, который управляет состоянием формы и взаимодействует с правилами валидации, заданными через rules.


Компонент ElForm и его свойства

ElForm является контейнером для всех элементов формы. Основные свойства:

  • model – объект, который связывает данные формы с Vue-состоянием.
  • rules – объект с правилами валидации для каждого поля формы.
  • label-width – ширина меток полей.
  • status-icon – отображение иконки состояния валидации.
  • validate-on-rule-change – автоматически проверять поле при изменении правил.

Пример базовой структуры:

<template>
  <el-form :model="formData" :rules="formRules" ref="myForm">
    <el-form-item label="Имя" prop="name">
      <el-input v-model="formData.name"></el-input>
    </el-form-item>
    <el-form-item label="Email" prop="email">
      <el-input v-model="formData.email"></el-input>
    </el-form-item>
    <el-button @click="submitForm">Отправить</el-button>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      formData: {
        name: '',
        email: ''
      },
      formRules: {
        name: [
          { required: true, message: 'Введите имя', trigger: 'blur' },
          { min: 3, max: 50, message: 'Длина от 3 до 50 символов', trigger: 'blur' }
        ],
        email: [
          { required: true, message: 'Введите email', trigger: 'blur' },
          { type: 'email', message: 'Некорректный email', trigger: ['blur', 'change'] }
        ]
      }
    }
  },
  methods: {
    submitForm() {
      this.$refs.myForm.validate((valid) => {
        if (valid) {
          console.log('Форма корректна', this.formData);
        } else {
          console.log('Форма содержит ошибки');
          return false;
        }
      });
    }
  }
}
</script>

Правила валидации

Правила задаются объектом rules и поддерживают несколько типов проверки:

  1. Обязательные поляrequired: true.
  2. Типы данныхtype: 'email', 'number', 'url'.
  3. Диапазоны и длинаmin, max.
  4. Пользовательские функцииvalidator: (rule, value, callback) => {}.

Пример пользовательской функции:

{
  validator: (rule, value, callback) => {
    if (!/^[A-Z]/.test(value)) {
      callback(new Error('Имя должно начинаться с заглавной буквы'));
    } else {
      callback();
    }
  },
  trigger: 'blur'
}

Триггеры валидации

Каждое правило может иметь событие-триггер, которое определяет момент проверки:

  • blur – при потере фокуса поля.
  • change – при изменении значения.
  • Массив событий – можно указать несколько, например: trigger: ['blur', 'change'].

Проверка всей формы и отдельных полей

  • validate – проверяет все поля формы. Возвращает callback с результатом valid.
  • validateField – проверяет конкретное поле по ключу prop.
  • resetFields – сбрасывает значения и ошибки.
  • clearValidate – очищает сообщения об ошибках без изменения данных.

Пример проверки конкретного поля:

this.$refs.myForm.validateField('email', (errorMessage) => {
  if (errorMessage) {
    console.log('Ошибка в email:', errorMessage);
  }
});

Интеграция с ElFormItem

Каждое поле должно быть обернуто в ElFormItem с указанием свойства prop. Это связывает поле с правилом валидации и позволяет автоматически показывать ошибки.

Ключевые моменты:

  • label – отображаемое название поля.
  • prop – ключ в объекте model, по которому происходит валидация.
  • error – ручная установка текста ошибки (опционально).
  • show-message – включение/отключение отображения ошибок.

Валидация сложных условий

Для сложных случаев можно объединять несколько правил:

  • Проверка зависимости между полями.
  • Асинхронная валидация (например, проверка уникальности имени на сервере):
{
  validator: async (rule, value, callback) => {
    const exists = await checkUsernameExists(value);
    if (exists) {
      callback(new Error('Имя уже занято'));
    } else {
      callback();
    }
  },
  trigger: 'blur'
}

Визуальная обратная связь

Element Plus автоматически отображает состояния поля:

  • success – корректное значение.
  • error – ошибка валидации.
  • validating – процесс проверки (для асинхронной валидации).

С помощью свойства status-icon можно включить визуальные иконки состояния рядом с полями.


Локализация и пользовательские сообщения

Сообщения об ошибках можно задавать как статически, так и динамически:

{
  required: true,
  message: `Поле ${fieldName} обязательно`,
  trigger: 'blur'
}

Также можно интегрировать с библиотеками локализации, чтобы автоматически переводить ошибки для разных языков интерфейса.


Рекомендации по структуре форм

  1. Использовать model и rules централизованно для упрощения поддержки.
  2. Разбивать большие формы на несколько ElForm, если правила и поля сильно различаются.
  3. Всегда использовать prop для каждого ElFormItem — иначе валидация работать не будет.
  4. Асинхронные проверки выполнять с визуальной индикацией validating, чтобы пользователь видел процесс.

Эти механизмы делают Element Plus гибким инструментом для реализации валидации на стороне клиента, позволяя создавать надежные формы с минимальными усилиями и высокой наглядностью.