下面的自定义百分比验证器将受益者数组作为参数。受益人表单是使用planPercents构建的,其中百分数作为formConrol。控制台日志适用于分布超过100%的任何计划。但是,我无法成功返回无效值并将formArray标记为无效。
beneficiaries: this.fb.array([], PercentValidator.beneficiaryDistValidator),
getPlanPercentGroup(): FormGroup {
return this.fb.group({
planUnitId: [null, Validators.required],
percent: [0, Validators.required],
});
}
import {FormArray} from '@angular/forms';
export class PercentValidator {
static beneficiaryDistValidator(formArray: FormArray): ValidationResult {
if (formArray.controls.length) {
// if there is at least one beneficiary
const planPercentArray = formArray.at(0).get('planPercents') as FormArray;
if (planPercentArray && planPercentArray.controls.length) {
for (let i = 0; i < planPercentArray.controls.length; i++) {
let planPercentCounter = 0;
formArray.controls.forEach(beneficiary => {
const planPercentArray2 = beneficiary.get('planPercents') as FormArray;
planPercentCounter += planPercentArray2.at(i).get('percent').value;
if (planPercentCounter > 100) {
console.log('Invalid');
return {Invalid: true};
}
});
}
}
}
return null;
}
}
export interface ValidationResult {
[key: string]: boolean;
}
答案 0 :(得分:1)
那是因为您正试图从forEach
回调内部返回。您必须在回调的外部中定义一个变量,然后从内部进行分配。然后您就可以return
了。