Angular 9“没有提供ControlContainer的提供者” VSCode错误,带有嵌套的Form Builder表单组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular 9“没有提供ControlContainer的提供者” VSCode错误,带有嵌套的Form Builder表单组相关的知识,希望对你有一定的参考价值。

注意:我已经搜索了答案,但是所有人都只是对“ import ReactiveFormsModule and FormsModule”说而已。我所有其他的反应式表格都没有问题。

此外,代码可以编译并在浏览器中运行,而不会出现控制台错误。但是,无论我尝试什么,这都是令人沮丧的,Visual Studio代码仍然会使用错误“没有为ControlContainer提供程序”来标记我的嵌套表单组件。

我有一个带有嵌套表单组的表单生成器组,即“帐单地址”。该组中的输入位于主组件中定义的主要形式的嵌套组件中:

  fedexFormGroup = this.fb.group(
    fedexAccountNumber: ['', Validators.required],
    fedexAccountNickname: [''],
    fedexDifferentAddress: [false],
    fedexIncludesSmartPost: [false],
    fedexAcceptTerms: [false],
    billingAddress: this.fb.group(
      addressLine1: [null, Validators.required],
      addressLine2: [null],
      company: [null],
      countryCode: [null, Validators.required],
      city: [null, Validators.required],
      email: [null, Validators.email],
      name: [null, Validators.required],
      phone: [null],
      postalCode: [null, Validators.required],
      residential: [false],
      state: [null, Validators.required]
    )
  );

嵌套组件TS:

import  Component, OnInit, Input  from '@angular/core';
import  ControlContainer, FormGroupDirective, FormGroup  from '@angular/forms';

@Component(
  selector: 'spa-compact-address-block',
  templateUrl: './compact-address-block.component.html',
  styleUrls: ['./compact-address-block.component.scss'],
  viewProviders: [
    
      provide: ControlContainer,
      useExisting: FormGroupDirective
    
  ]
)
export class CompactAddressBlockComponent implements OnInit 
  @Input() formGroup: FormGroup;
  @Input() submitted = false;
  ...

然后,在父组件HTML中,标记为错误的代码块是spa-compact-address-block组件。

<form [formGroup]="formGroup">

...some top level form stuff..

   <div[formGroup]="rsFormGroup" *ngIf="isReceiving">

...second level form group fields ...

      <div[formGroup]="fedexFormGroup" *ngIf="isfedex">
        <spa-compact-address-block
          [formGroup]="billingAddressControl"
          [submitted]="submitted"
        ></spa-compact-address-block>
      </div>

   </div>

</div>


</form>

我也尝试过将其添加到父组件TS:

  get billingAddressControl() 
    return this.fedexFormGroup.controls.billingAddress as FormGroup;
  

没有效果。正如我说的那样,由于它可以编译并运行,因此这实际上不是错误,但是我真的很好奇我可以做些什么以确保编辑器每次执行时都不会标记这种事情。

答案

似乎在使用变量名称formGroup时出现错误。将其更改为@Input() fGroup: FormGroup;,然后在视图文件中进行必要的更新。

以上是关于Angular 9“没有提供ControlContainer的提供者” VSCode错误,带有嵌套的Form Builder表单组的主要内容,如果未能解决你的问题,请参考以下文章

关于 Angular 9 迁移的 Angular 生产问题

安装nodejs后无法安装@angular/cli@9.1.8

Angular 9 - ????????????????

Angular 9 - 删除 Angular Material Stepper 上的默认图标(创建)

未检测到匹配的服务人员 - Angular 9

升级到 9.0 和 angular 7 后修复 angular-redux/store