Formarray не показывает все записи, полученные от службы / API - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь исправить объект, полученный из вебапи, в угловую реактивную форму.Форма также имеет formarray.Но, несмотря на наличие более 3-х или более записей, только 2 записи исправляются к формату реактивной формы.

У меня есть две сущности noseries и noseriesList, где в них есть ноль или много значений.Итак, после получения переносов из webapi, я хочу залатать свойства и навигационный список «noseriesLists» переносов в реактивную форму.Остальные свойства исправляются корректно, но только 2 записи списка навигации «noseriesLists» подключаются к форме Array, вложенному в реактивную форму.

//initialization of form
    this.noseriesForm = this.fb.group({
      id: [null],
      description: ['', Validators.required],
      code: [ '', Validators.compose([Validators.maxLength(10), Validators.required])],
      noSeriesList: this.fb.array([
         this.initLine(), this.initLine()
      ])
    });

//patching the object received from service to form
 this.route.params.subscribe(routeParam => {
      if (routeParam.id) {
        this.noseriesService.get(routeParam.id)
        .subscribe((data: NoSeries) => {
          this.isCreateMode = false;
          this.noseries = data;
          this.noseriesForm.patchValue(this.noseries);
          console.log(this.noseries, 'data from api');
          console.log(this.noseriesForm.value,'formvalue');
        });
      }

    });

//initialise formArray
  initLine(): FormGroup {
    return this.fb.group({
      id: [null],
      startingNoSeries: ['', Validators.required],
      endingNoSeries: '',
      lastUsedSeries: '',
      effectiveDate: [null],
      endingDate: [null],
      noSeriesId: [null]
    });
  }


регистрация данных, полученных из сервиса, показывает 3 записи noseriesListтогда как значение logging formvalue показывает только 2 записи noseriesList.

1 Ответ

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

пока вы инициализируете массив форм в первый раз, вы добавляете два пустых элемента управления. Вот почему, когда вы устанавливаете значение в formgroup, заполняются только эти два пустых элемента управления. перед заполнением значения вы должны заполнить formarray числом элементов управления, которые будут исправлены.

//patching the object received from service to form
this.route.params.subscribe(routeParam => {
    if (routeParam.id) {
        this.noseriesService.get(routeParam.id).subscribe((data: NoSeries) => {
          this.isCreateMode = false;
          this.noseries = data;

          const nsList = this.noseriesForm.get("noSeriesList") as FormArray;
          nsList.clear();
          this.noseries.forEach(_ => nsList.push(this.initLine()));

          this.noseriesForm.patchValue(this.noseries);
          console.log(this.noseries, 'data from api');
          console.log(this.noseriesForm.value,'formvalue');
        });
    }

});
...