所以我有一个表单,只有当另一个控件有值时才需要一个控件,为此我创建了以下结构
profileGroup = this.fb.group({
username: [''],
address: [
'',
[
(control: AbstractControl) => {
if (this.profileGroup?.get('username')?.value) {
return (Validators.required)(control);
}
return (Validators.nullValidator)(control);
},
],
],
});
这个函数很好用,一旦username
控件得到一个值,aValidators.required
就会被添加到address
控件中。但是,尽管添加了验证器,但address
控件的有效性不会更新,因此控件仍标记为valid
.
如果可能的话,我想避免使用类似的东西
this.profileGroup.get('username')?.valueChanges.subscribe(val=>{
this.profileGroup.get('address')?.updateValueAndValidity()
})
因为可能存在我不知道名称的动态控件,并且不想为每个控件设置一个可观察的。
这是一个工作示例的堆栈闪电战 https://stackblitz.com/edit/angular-10-formbuilder-example-m8qjq8?file=src/app/app.component.ts