Hack Frontend Community

Разница между Template-driven и Reactive формами в Angular

Что такое формы в Angular?

В Angular есть два подхода к созданию форм:

  1. Template-driven forms — формы, построенные на основе шаблонов (HTML).
  2. Reactive forms — формы, управляемые из TypeScript-кода.

Сравнительная таблица

ХарактеристикаTemplate-driven FormsReactive Forms
ОсноваHTML-шаблонTypeScript-код
МодульFormsModuleReactiveFormsModule
УправлениеДекларативное (через шаблон)Императивное (через код)
ПодходЛегкий, декларативныйГибкий, программный
ВалидацияЧерез HTML-атрибуты + директивыЧерез API и методы
ТестированиеСложнееЛегче
Подходит дляПростых формСложных/динамических форм

Пример Template-driven формы

<form #userForm="ngForm" (ngSubmit)="onSubmit(userForm)">
  <input name="username" ngModel required />
  <input name="email" ngModel email />
  <button type="submit">Отправить</button>
</form>
onSubmit(form: NgForm) {
  console.log(form.value);
}
  • Используется ngModel для привязки данных.
  • Директивы (required, email) для валидации.
  • Логика находится в шаблоне.

Пример Reactive формы

import { FormGroup, FormControl, Validators } from '@angular/forms';

form = new FormGroup({
  username: new FormControl('', Validators.required),
  email: new FormControl('', [Validators.required, Validators.email])
});

onSubmit() {
  console.log(this.form.value);
}
<form [formGroup]="form" (ngSubmit)="onSubmit()">
  <input formControlName="username" />
  <input formControlName="email" />
  <button type="submit">Отправить</button>
</form>
  • Управление полностью в TS-коде.
  • Валидация задается в FormControl через Validators.
  • Лучше подходит для сложных сценариев.

Когда использовать?

СценарийРекомендуемый подход
Простая форма входаTemplate-driven
Сложная динамическая форма с логикой и валидациейReactive
Необходимость масштабирования и тестированияReactive
Быстрая и простая реализация формыTemplate-driven

Важно:

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