Пользовательский контрольный объем валидатора в реактивных формах
Мне было трудно реализовать пользовательскую проверку в моих реактивных формах в Angular. Мне нужно контролировать количество. Количество не должно быть больше доступного количества. Проблема, как я могу получить сумму всего количества, если в каждой строке есть subrows. Как я смогу вычислить общее количество подстрок и сравнить его с родительской строкой, в которой найдено доступное количество. Вот мой код ниже.
Вот также ссылка на мой код, пожалуйста, нажмите на эту ссылку
customValidator(campo1: string) {
return (group: FormGroup): { [key: string]: any } => {
const receive = group.controls[campo1];
//Change this
const available = 10;
if (receive.value > available) {
return {
out: true
};
}
}
}
1 ответ
Решение
Ключ использует "parent" для достижения formArray. тогда мы можем использовать карту, чтобы преобразовать массив и получить только количество очередей и уменьшить, чтобы получить сумму величин
customValidator(campo1: string) {
return (group: FormGroup): { [key: string]: any } => {
//get the formArray
const form=(group.parent as FormArray);
if (form)
{
//get the available quantity using parent
let available =form.parent.get('available_quantity').value;
//the final available are the available less each quantity
available=form.value //In form.value we have e.g. [{quantity:10..},{quantity:16}]
.map(x=>x.quantity?+x.quantity:0) //using map we have, e.g. [10,16]
.reduce((a, b) => a - b, available) //using reduce we substract the quantities to available
if (available<0) {
return {
out: true
};
}
}
}
}