Ошибка "Can't bind to 'formGroup' since it isn't a known property of 'form'" в Angular
Причина ошибки
Ошибка возникает из-за того, что Angular не знает о директиве formGroup. Эта директива находится в модуле ReactiveFormsModule, который необходимо импортировать в ваш модуль (обычно AppModule или модуль, где зарегистрирован компонент).
В Angular реактивные формы не работают "из коробки" — нужно явно указать, что вы хотите их использовать. Без импорта ReactiveFormsModule Angular не распознаёт атрибут [formGroup] и выбрасывает ошибку.
Решение
Добавьте импорт ReactiveFormsModule в ваш модуль. Обычно это app.module.ts. Вот исправленный код:
// app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ReactiveFormsModule } from '@angular/forms'; // <-- Импортируем модуль
import { AppComponent } from './app.component';
import { MyFormComponent } from './my-form/my-form.component';
@NgModule({
declarations: [
AppComponent,
MyFormComponent
],
imports: [
BrowserModule,
ReactiveFormsModule // <-- Добавляем в imports
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
После этого перезапустите сервер разработки (обычно достаточно сохранить файл, но если не помогло — перезапустите ng serve). Ошибка должна исчезнуть.
Почему это работает?
ReactiveFormsModuleпредоставляет директивы для работы с реактивными формами:formGroup,formControlName,formArrayNameи другие.- Без этого модуля Angular не знает, как обрабатывать атрибут
[formGroup]в шаблоне. - Если вы используете шаблонные формы (с
ngModel), то импортируетсяFormsModule. Для реактивных форм —ReactiveFormsModule.
Дополнительные советы
- Убедитесь, что ваш компонент объявлен в том же модуле, куда вы добавили
ReactiveFormsModule. Если компонент находится в другом модуле (например, в FeatureModule), импортируйтеReactiveFormsModuleи туда. - Если вы используете standalone-компоненты (Angular 14+), можно импортировать модуль прямо в компоненте:
// my-form.component.ts (standalone)
import { Component } from '@angular/core';
import { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';
@Component({
selector: 'app-my-form',
standalone: true,
imports: [ReactiveFormsModule], // <-- Импорт в компоненте
templateUrl: './my-form.component.html'
})
export class MyFormComponent {
myForm = new FormGroup({
name: new FormControl(''),
email: new FormControl('')
});
}
Теперь ваша реактивная форма будет работать корректно. Если ошибка осталась — проверьте, не опечатались ли вы в названии директивы (должно быть formGroup, а не formgroup или form-group).
Альтернативное решение: проверка версии Angular и импортов
Иногда ошибка возникает не только из-за отсутствия ReactiveFormsModule, но и из-за путаницы между версиями Angular или неправильной структуры проекта. Вот что ещё стоит проверить:
- Версия Angular: Убедитесь, что вы используете актуальную версию (Angular 14+). В старых версиях (2–4) импорт мог отличаться — например,
@angular/formsмог не включатьReactiveFormsModuleпо умолчанию. Обновите проект черезng update. - Двойной импорт: Не импортируйте одновременно
FormsModuleиReactiveFormsModuleбез необходимости — это может вызвать конфликты, хотя ошибка будет другой. - Ленивая загрузка модулей: Если ваш компонент находится в лениво загружаемом модуле (feature module), импортируйте
ReactiveFormsModuleименно в этот модуль, а не в корневойAppModule.
Пример для feature module:
// feature.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ReactiveFormsModule } from '@angular/forms';
import { MyFormComponent } from './my-form.component';
@NgModule({
declarations: [MyFormComponent],
imports: [CommonModule, ReactiveFormsModule]
})
export class FeatureModule { }
Если после всех проверок ошибка остаётся — попробуйте создать новый проект с помощью ng new и перенести код. Иногда это помогает выявить скрытые проблемы конфигурации.
Ответов пока нет.
Войдите чтобы оставить ответ