NullInjectorError:没有为FormBuilder提供程序

时间:2020-05-22 10:13:04

标签: angular primeng angular-reactive-forms angular-formbuilder

我需要使用FormBuilder,但是程序给了我一些错误。这是我可以从其他组件导出的模块:

module.ts是

@NgModule({
    imports: [
        CommonModule,
        ReactiveFormsModule,
        FormsModule,
        DialogModule,
        ButtonModule,
        InputTextModule,
        TableModule,
        MessageModule

    ],
    declarations: [
        SearchCodeComponent
    ],
    exports: [
        SearchCodeComponent
    ],
    providers: []

})

export class SearchCodeModule { }

在我的html中,我这样做:

  <form [formGroup]="descriptionForm" (ngSubmit)="onSubmit()">
...
..
<input formControlName="code">..

我会这样做:

 descriptionForm: FormGroup

问题是,当我进入页面时,我得到两个异常

ERROR NullInjectorError: R3InjectorError(AppModule)[FormBuilder -> FormBuilder -> FormBuilder]: 
  NullInjectorError: No provider for FormBuilder!

另一个是:

 ASSERTION ERROR: Reached the max number of directives [Expected=> 4 != 4 <=Actual]

有人知道我该如何解决吗?

2 个答案:

答案 0 :(得分:0)

似乎您正在ReactiveFormsModule中导入AppModule。从主要AppModule导入中删除它。

在github上检查此线程,它包含其他一些可能的方法来解决此问题https://github.com/angular/angular/issues/31221#issuecomment-617474627

答案 1 :(得分:0)

在TS文件中,您需要初始化表单组(根据NullInjectorError)。一种方法是在ngOnInit(){}函数中对其进行初始化。如果您有更多的表单项,这将给您更多的控制权。

ngOnInit(){
this.descriptionForm = new FormGroup({
    code: new FormControl('')
  });
};

否则,您可以在声明descriptionForm

的TS文件中执行以下操作
descriptionForm: FormGroup  = new FormGroup({
        code: new FormControl('')
      }); 

希望这会有所帮助:)