Как добавить valueChanges в formcontrol, добавляемый динамически в formArray в Angular7 - PullRequest
0 голосов
/ 02 мая 2020

Я хочу добавить изменения значений для formcontrol, динамически добавляемого в formarray.

Это мой файл .ts

const pwnhAmountControl = <FormArray>this.PWNHAmountForm.controls['formAwnhamountListObject'];

for (let amountObject of this.PWNHAmountData) {
    pwnhAmountControl.push(this.fb.group(
        {
             CustomerId: [amountObject.CustomerId],
             ProductId: [amountObject.ProductId],
             Period: [amountObject.Period],
             SACId: [amountObject.SACId],
             SACName: [amountObject.SACName],
             AccrualFromDate: this.datePipe.transform([amountObject.AccrualFromDate.substring(0, 10)], "MM/dd/yyyy"),
             AccrualAmount: [amountObject.AccrualAmount],
             UserId: ["support"],
             ProductName: [this.fproductname],
             CustomerName: [this.fcustomername]
         }));
}

Я хочу прослушать изменение значения в AccrualAmount - пожалуйста, помогите

1 Ответ

0 голосов
/ 02 мая 2020

Вы можете сделать это внутри l oop для каждого индекса (элемента управления) следующим образом:

    for (let i = 0; i < this.PWNHAmountData.length; i++) {
      // build the form 
      pwnhAmountControl.push(this.fb.group(
        {
             CustomerId: [amountObject.CustomerId],
             ProductId: [amountObject.ProductId],
             Period: [amountObject.Period],
             SACId: [amountObject.SACId],
             SACName: [amountObject.SACName],
             AccrualFromDate: 
             this.datePipe.transform([amountObject.AccrualFromDate.substring(0, 10)], 
             "MM/dd/yyyy"),
             AccrualAmount: [amountObject.AccrualAmount],
             UserId: ["support"],
             ProductName: [this.fproductname],
             CustomerName: [this.fcustomername]
         }));
       // listn to values changes
      formArray.at(i).get('AccrualAmount').valueChanges.subscribe(value => {
        console.log('AccrualAmount',value);
        // Here you can set the value back to zero if it's empty
        let numericValue = +value; // convert from string to number
         if(numericValue == 0){ // see if the result is equal to zero
          formArray.at(i).get('age').setValue(0,{emitEvent: false}); // set it to look like a zero
         // make sure to use {emitEvent: false} so you don't stuck in a loop of setting the value and then triggering the onValuChange event.
        }
      });
     }

воспроизведение стекаблица: (это другой пример, но в том же случае).

https://stackblitz.com/edit/angular-szxkme-t2aahm?file=app / autocomplete-display-example.ts

Вы можете найти нужный код в строке 49. Пожалуйста, пометьте ответ как правильный, если он вам помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...