Пользовательское контрольное количество валидатора в реактивных формах

Мне было трудно реализовать пользовательскую проверку в моих реактивных формах в Angular. Мне нужно контролировать количество. Количество не должно превышать доступное количество. Проблема, как я могу получить общее количество всего количества, если каждая строка имеет подстроки. Как я смогу вычислить общее количество подстрок и сравнить его с родительской строкой, в которой найдено доступное количество. Вот мой код ниже.

Вот также ссылка на мой код ПОЖАЛУЙСТА, НАЖМИТЕ ЭТО ССЫЛКА

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)


ключ использует «родительский» для достижения formArray. затем мы можем использовать карту для преобразования массива и получения только количества que и уменьшить, чтобы получить сумму количеств

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
          };
        }
      }
    }
  }
person Eliseo    schedule 27.08.2018
comment
Можете ли вы уменьшить свой код? Возможно, мне не нужна эта константа receive = group.controls[campo1]; и т.д... - person ; 27.08.2018
comment
Как насчет этих { [key: string]: any } и campo1: string в customerValidator()? Мне нужно поставить это? Спасибо. - person ; 27.08.2018
comment
Правда, в данном случае это не обязательно, я разрешил, если нужно было проверить значение (представьте, если вы хотите проверить, отрицательно ли значение). {key:string...} — это тип возврата функции. Все комментарии только для того, чтобы код был понятен - person Eliseo; 27.08.2018
comment
Можете ли вы удалить весь ненужный код? Спасибо, Элисео. - person ; 27.08.2018
comment
Как насчет campo:string в customValidator()? Мне это нужно? Мне не нужны эти параметры? - person ; 27.08.2018