FormControl
представляет собой базовый строительный блок Angular форм, который отслеживает значение и валидность отдельного элемента формы.
import { FormControl } from '@angular/forms';
// Создание FormControl
const emailControl = new FormControl('', [
Validators.required,
Validators.email
]);
// Получение значения
emailControl.value; // текущее значение
// Подписка на изменения
emailControl.valueChanges.subscribe(value => {
console.log('Новое значение:', value);
});
// Проверка валидности
emailControl.valid; // boolean
emailControl.errors; // объект с ошибками валидации
FormGroup
представляет собой коллекцию FormControl элементов, которые можно валидировать и управлять ими как единой группой.
import { FormGroup, FormControl } from '@angular/forms';
// Создание FormGroup
const userForm = new FormGroup({
firstName: new FormControl('', Validators.required),
lastName: new FormControl('', Validators.required),
email: new FormControl('', [Validators.required, Validators.email])
});
// Доступ к контролам
userForm.get('firstName').value;
userForm.controls.email.valid;
// Проверка валидности всей группы
userForm.valid;
// Установка значений
userForm.setValue({
firstName: 'John',
lastName: 'Doe',
email: 'john@example.com'
});
// Частичное обновление
userForm.patchValue({ firstName: 'Jane' });
FormGroup может содержать другие FormGroup для организации сложных иерархических форм:
const profileForm = new FormGroup({
basicInfo: new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl('')
}),
address: new FormGroup({
street: new FormControl(''),
city: new FormControl('')
})
});
// Доступ к вложенным контролам
profileForm.get('basicInfo.firstName').value;
Для упрощения создания форм Angular предоставляет FormBuilder
:
import { FormBuilder } from '@angular/forms';
constructor(private fb: FormBuilder) {}
this.userForm = this.fb.group({
username: ['', Validators.required],
email: ['', [Validators.required, Validators.email]],
address: this.fb.group({
street: [''],
city: ['']
})
});
Характеристика | FormControl | FormGroup |
---|---|---|
Назначение | Управление одним полем формы | Управление группой полей |
Валидация | Валидация одного значения | Валидация группы значений |
Состояние | Трекает состояние одного элемента | Агрегирует состояния всех контролов |
Использование | Для отдельных полей ввода | Для целых форм или секций формы |
// Создаем форму
this.loginForm = new FormGroup({
credentials: new FormGroup({
username: new FormControl('', Validators.required),
password: new FormControl('', [
Validators.required,
Validators.minLength(8)
])
}),
rememberMe: new FormControl(false)
});
// В шаблоне
<form [formGroup]="loginForm">
<div formGroupName="credentials">
<input formControlName="username" placeholder="Username">
<input formControlName="password" type="password" placeholder="Password">
</div>
<input type="checkbox" formControlName="rememberMe"> Remember me
</form>
FormControl
и FormGroup
- фундаментальные строительные блоки реактивных форм в Angular. FormControl управляет отдельными полями формы, в то время как FormGroup организует их в логические группы. Вместе они предоставляют мощный API для управления состоянием формы, валидации и обработки пользовательского ввода. Понимание этих концепций критически важно для эффективной работы с Angular формами.