可以通过订阅FormArray中的每个FormControl的valueChanges事件来手动触发验证函数。以下是一个示例代码:
import { Component } from '@angular/core';
import { FormGroup, FormBuilder, Validators, FormArray } from '@angular/forms';
@Component({
selector: 'app-root',
template: `
`,
})
export class AppComponent {
myForm: FormGroup;
constructor(private fb: FormBuilder) {
this.myForm = this.fb.group({
items: this.fb.array([
this.fb.control('', Validators.required),
this.fb.control('', Validators.required),
]),
});
// 订阅FormArray中每个FormControl的valueChanges事件
const formArray = this.myForm.get('items') as FormArray;
formArray.controls.forEach(control =>
control.valueChanges.subscribe(() => {
control.markAsTouched();
control.updateValueAndValidity();
})
);
}
get items() {
return this.myForm.get('items') as FormArray;
}
}
在这个示例中,我们通过手动订阅FormArray中每个FormControl的valueChanges事件来触发验证函数。在订阅中,我们调用FormControl的markAsTouched()方法来标记控件为已触摸状态,并使用updateValueAndValidity()方法更新控件的值和验证状态。这样,当FormControl的值发生变化时,验证函数就会被触发。