Angular 在反应式表单中设置和更新表单数组的验证
在angular 4中,我创建了一个表单,它有一个如下的表单数组Angular 在反应式表单中设置和更新表单数组的验证,angular,angular-reactive-forms,Angular,Angular Reactive Forms,在angular 4中,我创建了一个表单,它有一个如下的表单数组 this.formBuilder.group({ name: ['', [Validators.required, Validators.minLength(3)]], required:false, selectType: ['', [Validators.required]], items: this.formBuilder.array([this.buildItems()]) }) ... buildIte
this.formBuilder.group({
name: ['', [Validators.required, Validators.minLength(3)]],
required:false,
selectType: ['', [Validators.required]],
items: this.formBuilder.array([this.buildItems()])
})
...
buildItems() {
return this.formBuilder.group({
name: ['', [Validators.required]]
});
这将生成表单,我可以在此表单中添加或删除等,以及表单中的项目。
我现在试图实现的是,当selectType
等于custom
(设置为表单上的单选按钮值)时,我需要更改项目name
的验证并清除其验证要求
我已经在另一张表格上做了设置和更新,就像这样
changeValidation() {
if(condition){
this.form.get('name').setValidators(Validators.required);
this.form.get('name').updateValueAndValidity();
}
}
这很好,但是我不知道如何更新表单数组上的验证。我试过了
this.items.clearValidators();
this.items.updateValueAndValidity();
我没有得到任何错误,但它也不工作。哪种类型是有意义的,因为我不是针对特定的FormControl
但是当FormControls
是数组时,如何指定特定的FormControl
当FormControls为时,如何指定特定的FormControls
阵列
您必须使用所述的at
方法来获得单个控件:
this.items.at(0).clearValidators();
如果要清除name
控件的验证器,请执行以下操作:
this.items.at(0).controls.name.clearValidators();
如果您想删除每个控件的验证器,那么FormArray似乎不提供这样的API。您必须迭代表单数组控件并删除每个控件的验证程序:
this.items.controls.forEach(c => c.clearValidators());
对于索引0处的
formControl
,不会进行更新。我想更新整个表单。我想清除this.items中name:[''[validators.required]]]
的验证器,然后像this.items.at(0.controls.name.clearValidators()代码>,我已经更新了密码。这对我不起作用。。我必须运行.controls[0].updateValueAndValidity();对于以其他方式进行的每个更改,验证并不总是得到更新。不需要循环,只需执行this.items.at(i).get('control_name').clearValidators()代码>