Angular 在单元测试中遇到角度嵌套形式错误,错误是什么?

Angular 在单元测试中遇到角度嵌套形式错误,错误是什么?,angular,angular-reactive-forms,reactive-forms,Angular,Angular Reactive Forms,Reactive Forms,因此,在单元测试嵌套角度形式时,我得到以下错误: No value accessor for form control with path: 'address -> address1' at _throwError (../packages/forms/src/directives/shared.ts:140:9) at setUpControl (../packages/forms/src/directives/shared.ts:37:27) a

因此,在单元测试嵌套角度形式时,我得到以下错误:

 No value accessor for form control with path: 'address -> address1'

      at _throwError (../packages/forms/src/directives/shared.ts:140:9)
      at setUpControl (../packages/forms/src/directives/shared.ts:37:27)
      at FormGroupDirective.addControl (../packages/forms/src/directives/reactive_directives/form_group_directive.ts:132:5)
      at FormControlName._setUpControl (../packages/forms/src/directives/reactive_directives/form_control_name.ts:278:66)
      at FormControlName.ngOnChanges (../packages/forms/src/directives/reactive_directives/form_control_name.ts:207:28)
表格定义如下

ngOnInit(){
this.form=this.fb.group({
地址:this.fb.group({
地址1:“”,
地址2:“”,
...
})
})
}
模板:

<form formGroup="form">
        <form formGroupName="address">
          <custom-text-input formGroupName="adress1" label="Address 1">
          </custom-text-input>
          <custom-text-input formGroupName="adress2" label="Address 1">
          </custom-text-input>
          <custom-text-input formGroupName="phone" label="Phone">
          </custom-text-input>
          <custom-text-input formGroupName="zipCode" label="Zip Code">
          </custom-text-input >
          <custom-text-input formGroupName="state" label="State">
          </custom-text-input >
        </form>
      </form>

我认为您在嵌套表单控件时缺少了另一个
this.fb.group({})

this.form=this.fb.group({
地址:this.fb.group({
地址1:[''],
地址2:['']
})
})
阅读官方文件


另外,
formControlName
仅适用于
。如果在任何其他元素上使用了
formControlName
,请仔细检查模板文件

如果希望将
formControlName
与其他表单控件一起使用,则必须使用
ControlValueAccessor
类创建自定义表单控件。看到这条鳄鱼了吗,伊奥的文章


编辑

除了
formGroupName
input绑定之外,还有
formControlName
input绑定,用于在FormGroup内声明的控件

摘自Angular的官方文件:

formControlName指令提供的formControlName输入将每个单独的输入绑定到FormGroup中定义的表单控件。表单控件与其各自的元素进行通信。它们还向表单组实例传递更改,表单组实例为模型值提供了真实性来源

this.form=this.fb.group({
地址:this.fb.group({
地址1:“”,
地址2:“”,
...
})
})
//等于
this.form=new FormGroup({
地址:新表格组({
地址1:新表单控件(“”),
地址2:新表单控件(“”)
})
})
如您所见,address1和address2不是表单组的新实例。如果您使用
formControlName
而不是
formGroupName
,我认为您的代码应该可以工作



向我们展示模板文件。添加的自定义文本输入实现了CTonRollValueAccessor。谢谢,我已经在做了,要清楚的是,组件工作正常,只是单元测试失败了。你能在测试套件中编辑,或者至少是在测试前、测试后编辑失败的测试用例吗?hi@user2167582,我已经编辑了我的答案,我认为你表格的结构仍然是错误的,这就是为什么它仍然不起作用