Получение значения из вложенной таблицы FormArray в реактивных формах - PullRequest
0 голосов
/ 26 августа 2018

У меня была проблема с поиском суммы, основанной на количестве * цена. Проблема в том, что в каждой строке есть подстроки. Как я могу получить сумму от количества и цены? Вот мой код ниже.

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

getAmount(value: FormControl) {
    const control = <FormArray>this.myForm.controls['people'];
    this.total = 0;
    control.controls.forEach((field) => {
      field.get('addresses')['controls'].forEach(element => {
        const col1 = +field.get('price')
        const col2 = +element.get('quantity');
        const sum = col1 * col2;

        // Get Amount
        element.get('amount').patchValue(sum, { emitEvent: false });

        // Get Grand Total
        this.total += sum;
      });
    });
  }

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Проблема здесь в том, что вы пытаетесь привести FormControl к числу, в то время как вам нужно получить значение из элемента управления, а затем привести к числу:

Итак, вместо:

const col1 = +field.get('price')
const col2 = +element.get('quantity');

вы должны делать что-то вроде:

const col1 = +(field.get('price').value || 0);
const col2 = +(element.get('quantity').value || 0);

Разветвленный стек Блиц

0 голосов
/ 26 августа 2018

Попробуй так:

Если вы хотите рассчитать сумму на основе quantity * price

РАБОЧИЙ ДЕМО

<td>
{{ myForm['controls'].people.controls[i].controls.addresses.controls[j].controls.amount.value }}
</td>

 getAmount(value) {
    value.forEach((pdata, i) => {
      pdata.addresses.forEach((data, k) => {
        this.myForm['controls'].people['controls'][i].controls.addresses.controls[k].controls.amount.patchValue((pdata.price * data.quantity), { emitEvent: false });
      })
    });
...