Angular 4 вложенный formArray Не удается найти элемент управления с путем: 'segmentRows3 -> 1 -> segmentId3'

Я не могу толкать массиву. У меня есть сегмент (идентификатор, время), в котором может быть один или несколько человек (роль, информация). Поле генерируется динамически. При загрузке на странице отображаются поля (см. Изображение ниже) .
Angular 4 вложенный formArray Не удается найти элемент управления с путем: 'segmentRows3 -> 1 -> segmentId3'

При попытке добавить сегмент получаю ошибку: ERROR TypeError: Cannot find control with path: 'segmentRows3 -> 1 -> segmentId3'
Вот код из файла .ts:

addSegment() {
let segmentRows3 = this.mySummaryForm.get('segmentRows3') as FormArray;
    segmentRows3.push(this.fb.array([
        this.fb.group({
            segmentTime3: '',
            segmentId3: '',             
            personRows3: this.fb.array([
            this.fb.group({
               personR3: '',
               personI3: ''
              })
            ])
        })
      ]));
  }   

  segmentRows3: this.fb.array([
    this.fb.group({
        segmentId3: '',
        segmentTime3: '',
        personRows3: this.fb.array([
        this.fb.group({
           personR3: '',
           personI3: ''
          })
        ])
    })
  ]),

Код .html

<div formArrayName = "segmentRows3">
  <label><h2>New segment</h2></label>
  <div *ngFor = " let segmentRow of mySummaryForm.controls.segmentRows3.controls; let i=index " > 
    <div  class = "form-group" [formGroupName] = "i" >   {{i+1}}
        <label for = "segmentId3">Segment ID
            <select formControlName = "segmentId3" placeholder = "pick" type = "text" id = "segmentId3" class = "form-control" [(ngModel)] = "levelNumSegment3" (ngModelChange) = "toNumberSegment3()">
                <option *ngFor = "let level of segmentId" [value] = "level.num">{{level.name}}</option>
            </select> 
        </label>      
        <label for = "segmentTime3">Segment time
            <input formControlName = "segmentTime3" type = "text" id = "segmentTime3" class = "form-control" placeholder = "select a time" (ngModelChange) = "onChange($event)">
        </label>
        <button type = "button" (click) = "addPerson(i)" class = "btn btn-info">Add a person</button><br><br> 
        <div formArrayName = "personRows3">
            <div *ngFor = " let personRow of segmentRow.controls.personRows3.controls; let j=index " >
                <div  class = "form-group" [formGroupName] = "j" >   {{j+1}}    
                        <label for = "personR3">person Role 
                        <input formControlName = "personR3" [typeahead] = "personRole" [typeaheadOptionsLimit] = "10" [typeaheadMinLength] = "0" type = "text" id = "personR3" class = "form-control" placeholder = "select a role" (ngModelChange) = "onChange($event)" >
                        </label>
                        <label for = "personI3">Person infos
                        <input formControlName = "personI3" [typeahead] = "states" [typeaheadOptionsLimit] = "10" [typeaheadMinLength] = "0" type = "text" id = "personI3" class = "form-control" placeholder = "select infos" (ngModelChange) = "onChange($event)" >
                        </label>
                        <label><span (click) = "deletePerson(j)" class = "btn btn-danger">Remove</span></label><br><br>
                </div>                  
            </div>
        </div>
    </div>            
  </div>
</div>
<br><button type = "button" (click) = "addSegment()" class = "btn btn-primary">Add a segment</button>   

Когда я пытаюсь добавить, он добавляет сегмент (идентификатор, время), но не человека (роль, информация), в отличие от загрузки (изображение ниже), и выдает ошибку: ERROR TypeError: Cannot find control with path: 'segmentRows3 -> 1 -> segmentId3'. Почему?

Angular 4 вложенный formArray Не удается найти элемент управления с путем: &apos;segmentRows3 -&gt; 1 -&gt; segmentId3&apos;

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 844
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавляете FormArray в массив segmentRow3, в то время как ваш шаблон ожидает только FormGroup:

segmentRows3.push(this.fb.array([
                  ^^^^^^^^^^^^^^
                       why?
        this.fb.group({

Итак, попробуйте изменить его на:

segmentRows3.push(
  this.fb.group({
    segmentTime3: '',
    segmentId3: '',
    personRows3: this.fb.array([
      this.fb.group({
        personR3: '',
        personI3: ''
      })
    ])
  })
);

Другие вопросы по теме