导入ReactiveFormModule等仍报NG8002 formGroup绑定错误的解决方法
NG8002 表单绑定报错排查方案
针对已经尝试导入响应式表单相关模块,仍然触发Can't bind to 'formGroup' since it isn't a known property of 'form'的场景,按以下顺序排查即可解决:
- 核对导入的模块对象正确性
很多开发者会把响应式表单体系下的语法类和可导入的NgModule实体搞混:FormGroup、FormControl是供组件类实例化的表单模型类,根本不是可以在模块导入数组里注册的模块,不存在名为groupForm、ControlForm的Angular模块。支持[formGroup]绑定的唯一核心模块是ReactiveFormsModule,需从@angular/forms包中引入。 - 确认导入位置符合模块作用域规则
哪怕导入了正确的模块,如果放置位置不对也无法生效:- 不能把
ReactiveFormsModule导入到用到该表单的组件自身的@Component元数据里 - 必须把
ReactiveFormsModule导入到声明了Login2Component组件的那个NgModule的imports数组中,不管这个模块是根模块、还是独立的特性模块都可以
正确的导入示例代码:
import { NgModule } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { Login2Component } from './login2.component'; @NgModule({ declarations: [Login2Component], imports: [ // 需将模块放置在当前模块的imports列表中 ReactiveFormsModule ] }) export class Login2Module {} - 不能把
- 确认共享模块的导出链路完整
如果ReactiveFormsModule是放置在自定义共享模块(比如SharedModule)中,仅在共享模块的imports数组引入是不够的,还必须将ReactiveFormsModule添加到共享模块的exports数组中,否则所有引入了该共享模块的业务模块,都无法获取到表单相关的指令。 - 清理本地构建缓存
若上述操作全部确认无误仍报错,大概率是Angular CLI的本地缓存残留导致的编译识别问题。在项目根目录依次执行以下操作即可解决:- 执行
ng cache clean清理本地构建缓存 - 重新执行
ng serve启动开发服务
- 执行
内容的提问来源于stack exchange,提问作者Shubham Pawar
相关产品推荐
相关产品推荐

