Angular FormArray элементов управления, как получить сводку? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть FormGroup, в которой есть продукты formArray (динамические элементы управления, которые можно добавлять или удалять):

FormGroup {
  controls {
    products (FormArray) {
      0 : {summary.value: 5}...
      1 : {summary.value: 8}..
there can be N of these controls...
    }
  }
}

Ожидаемое резюме = 5 + 8 = 13

Я хочу получитьвсе итоговое значение. Суммируйте их. Как мне это сделать?

Что я сделал, но это работает не так, как ожидалось:

   calculateAllSummary(formGroup: FormGroup) {
      Object.values(formGroup.controls.products['controls']).forEach((value: FormControl) => {

                let summaryControl: FormControl = value['controls'].summary;
                this.summarySubscription = summaryControl.valueChanges.subscribe(val => {
                    if(this.checkIfValuesArentTheSame(val) == true){
                        let price = val;
                        if (price != null && typeof price == "string") {


                price = price.split(',').join('');
                    }
                    let numericValue = 0 + Number(price);
                    this.summaryValue = this.dp.transform(numericValue, '2.2-5');

                };
            },
            (error) => {
                console.log(error)
            },
            );
    });
}

Проблема с моей функцией заключается в том, что всякий раз, когда я пишу сводку в другом продукте, она обновляется доСводный номер другого продукта, но я хочу добавить его к последнему итоговому значению элемента управления. Я знаю, что это происходит из-за этой строки: пусть numericValue = 0 + Number(price), но я не могу понять, как это сделать по-другому.

1 Ответ

1 голос
/ 01 октября 2019

Уменьшите записи вашего объекта.

const formValue = {
  summaryOne: '5',
  summaryTwo: '8',
  someRandomFieldToExclude: 'LOL'
};

const totalSummary = Object
  .entries(formValue)
  .filter(([key]) => key.toLowerCase().includes('summary'))
  .reduce((p, [, v]) => p += +v, 0);
  
console.log(totalSummary);
...