dec*_*nic 23 typescript angular
我试图在formarray中推送另一个formbuilder,但它给了我一个错误,因为我认为在初始化代码时数组中没有项目,因此没有控件.错误是属性"控件"在"AbstractControl"类型之后不存在
(<FormArray>this.loanTypeForm.controls['frequency']).controls[index]
Run Code Online (Sandbox Code Playgroud)
我正在使用角度2.0.0-beta.17
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],
})
);
Run Code Online (Sandbox Code Playgroud)
dev*_*033 69
您可以使用['controls']而不是.controls,如下所示:
(<FormArray>this.loanTypeForm.controls['frequency']).controls[index]['controls']['settings'].push(...)
Run Code Online (Sandbox Code Playgroud)
但为了简化并提供更多可读性,我建议您将其全部更改为:
const control = this.loanTypeForm.get(`frequency.${index}.settings`) as FormArray;
control.push(...);
Run Code Online (Sandbox Code Playgroud)
似乎loanTypeForm被视为AbstractControl......所以让我们向编译器保证它是FormGroup
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
Run Code Online (Sandbox Code Playgroud)
如果该控件也是组或表单,我们也只需要使用 assert (cast)
var control = group.controls[index] as FormGroup
Run Code Online (Sandbox Code Playgroud)
然后我们可以轻松地继续
control.controls['settings']...
Run Code Online (Sandbox Code Playgroud)
get() 是访问表单控件的首选方法
this.loanTypeForm.get(`frequency.${index}.settings`)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19962 次 |
| 最近记录: |