Angular2: Property 'controls' does not exist on type 'AbstractControl'. Error when accessing .control of an object within a formarray thru an index
我正在尝试在formarray中推送另一个formbuilder,但这给我一个错误,因为我认为初始化代码时数组中没有项目,因此没有控件。 错误是属性'controls'在类型'AbstractControl'之后不存在
1 | (<FormArray>this.loanTypeForm.controls['frequency']).controls[index] |
我正在使用角度2.0.0-beta.17
1 2 3 4 5 6 7 8 9 10 11 12 13 | let settingsForm: FormArray = new FormArray([]); (<FormArray>this.loanTypeForm.controls['frequency']).push( this.formBuilder.group({ 'name': [value, Validators.required], 'settings': settingsForm, }) ); (<FormArray>this.loanTypeForm.controls['frequency']).controls[index].controls['settings'].push( this.formBuilder.group({ 'term': [null, Validators.required], 'eir': [null, Validators.required], }) ); |
您可以使用
1 | (<FormArray>this.loanTypeForm.controls['frequency']).controls[index]['controls']['settings'].push(...) |
但是为了简化并提供更高的可读性,建议您将其全部更改为:
1 2 | const control = this.loanTypeForm.get(`frequency.${index}.settings`) as FormArray; control.push(...); |
1 | this.loanTypeForm.get(`frequency.${index}.settings`) |
看来
1 2 3 | var group = this.loanTypeForm as FormGroup; var array = group.controls['frequency'] as FormArray; var control = group.controls[index]; // AbstractControl again.. could be casted as needed |
如果该控件也是组或形式,我们也只需要使用assert(cast)
1 | var control = group.controls[index] as FormGroup |
然后我们可以轻松地继续
1 | control.controls['settings']... |
下面的代码正在工作
1 | <FormArray>this.loanTypeForm.controls['frequency']).controls[index]['controls']['settings'].push(...) |