Выдвижение нескольких значений в FormArray - PullRequest
0 голосов
/ 25 мая 2019

Я на самом деле застрял здесь.Пробовал искать в сети, но не нашел ничего достаточно полезного для использования.

Я пытаюсь передать значение в FormArray.Проблема в том, что я являюсь значениями массива, и мне нужно, чтобы он был вставлен в мою форму.Я могу добавить только одну запись.Это вставка последнего объекта итерированного массива в formArray.

Ниже приведен код:

.TS

salesResult: FormArray;

async ClickSearch() {
//this method get the dto with the mapped formValues. 
const getSalesResult = this.salesEvidenceFormService.getSalesSearchFormGroup(
  this.form
);
//the above method form values passed to the web-api to return result. I get 200 records here. 
const salesSearchResults: any = await this.salesEvidenceService.getSalesSearchData(
  getSalesResult
);

//getting the formArray. this I have used as an arry form. As shown in below code
this.salesResult = this.form.get('salesSearchResult') ;

for (let item of salesSearchResults) {
  this.salesResult.controls[0].setValue(item);
  //this.form.controls.salesSearchResult.value.address = item.address;
}
}

public async form(valuationId: any): Promise<FormGroup> {
const form: FormGroup = this.formBuilder.group({
  id: valuationId,      
  siteAreaUnit: 'm2',
  lettableAreaUnit: 'm2',
  selectedDateRange: 0,
  selectedQuickChoice: '',
  metroNonMetro: 'ALL',
  salesSearchResult: this.formBuilder.array([
    this.getSalesSearchResultForm()
  ])
});
return await form;
  }

getSalesSearchResultForm(): FormGroup {
return this.formBuilder.group({
  id: this.formBuilder.control(''),
  masterId: this.formBuilder.control(''),
  address: this.formBuilder.control(''),
  salePrice: this.formBuilder.control(''),
  saleDate: this.formBuilder.control(''),
  initialYield: this.formBuilder.control(''),
  equivalentYield: this.formBuilder.control(''),
  nlaPsm: this.formBuilder.control(''),
  siteAreaPsm: this.formBuilder.control(''),
  lettableArea: this.formBuilder.control(''),
  wale: this.formBuilder.control(''),
  description: this.formBuilder.control(''),
  commercialSalesExists: this.formBuilder.control(''),
  documentId: this.formBuilder.control(''),
  totalRecord: this.formBuilder.control('')
});

}

Я просто хочу вставить запись в мойформа.так что я могу включить его в мой HTML, чтобы показать записи, возвращенные из API.Я не знаю, что я делаю не так здесь

Ответы [ 2 ]

1 голос
/ 17 июня 2019

У меня тоже была похожая проблема и выложили вопросОтвет от "ysf" в моем посте помог мне решить эту проблему.Вы можете найти решение в комментарии "YSF".Хотя пост старый, я надеюсь, что он поможет вам. Ссылка на пост: -

Formarray не показывает все записи, полученные от service / api

0 голосов
/ 20 июня 2019

Я правильно понял, когда использовал метод Push. Ниже то, что я реализовал. Общий пример:

const tempContainer = this.formBuilder.array([]);
for (const current of formArray.controls) {
  const existing = this.saveForm.controls.find(
    x => x.value.Id === current.value.Id
  );

  if (existing) {
    tempContainer.push(existing);
  } else {
    tempContainer.push(current);
  }
}
...