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,我已经编辑了我的答案,我认为你表格的结构仍然是错误的,这就是为什么它仍然不起作用