Как перебирать FormArray в FormGroup в реактивной форме Angular

Структура моей формы показана ниже.

-MainForm(ParentForm)
 -FormGroup(MedicineGroup)
  -FormArray(MedicineArray)

Я хотел повторить MedicineArray, для чего я провел небольшое исследование и написал приведенный ниже код.

for (let control of soForm.get('MedicineGroup').controls['MedicineArray'].controls) {
    medObj.name.push(control.controls['MedName'].value);
  }

Код работает нормально, но я получаю предупреждение, в котором говорится

Property 'controls' does not exist on type 'AbstractControl'.

Есть ли другой или лучший способ итерации FormArray, который находится внутри FormGroup?

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
10 295
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете попробовать использовать ['controls'] вместо .controls:

for (let control of soForm.get('MedicineGroup')['controls']['MedicineArray']['controls']) {
    // ...
}

Другой вариант:

const formArray = soForm.get('MedicineGroup.MedicineArray') as FormArray;
console.info(formArray);

Хорошей практикой является доступ к вложенным элементам управления с использованием записи через точку.

Это происходит потому, что система типов понимает, что у вас есть AbstractControl, поскольку AbstractControl.prototype.get() возвращает AbstractControl, но не знает, на какой конкретный AbstractControl вы ссылаетесь, поэтому доступ к свойству controls вызывает это предупреждение.

У вас есть несколько вариантов, как решить эту проблему, приведя или введя другой символ, но метод тот же: предоставьте более точную информацию о типе:

let aFormArray: FormArray = soForm.get('MedicineGroup.MedicineArray');

for (let c of aFormArray.controls) {
    medObj.name.push(c.controls['MedName'].value);
}

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