gpt4 book ai didi

angular - 以 react 形式设置和更新表单数组的验证

转载 作者:太空狗 更新时间:2023-10-29 17:09:20 25 4
gpt4 key购买 nike

在 Angular 4 中,我正在创建一个具有这样的表单数组的表单

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

最佳答案

how do i specify a specific FormControl when the FormControls are an array?

您必须使用 at 描述的方法 here获取单个控件:

this.items.at(0).clearValidators();

如果您想清除 name 控件的验证器,请这样做:

 this.items.at(0).controls.name.clearValidators();

如果你想删除每个控件的验证器,表单数组似乎没有提供这样的 API。您必须遍历表单数组控件并删除每个控件的验证器:

this.items.controls.forEach(c => c.clearValidators());

关于angular - 以 react 形式设置和更新表单数组的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45145708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com