На моем сайте есть реактивные формы, использующие FormBuilder.
У меня есть два поля с FormControl и массив полей, созданный пользователем, который называется FormArray.
Когда я отправил данные на сервер, оказалось, что FormArray отправляет вместо массива строку с перечисленными элементами через запятую.
Как я мог отправить данные на сервер с помощью массива?
Это методы моего класса
formGroup = this.fb.group({
link: [null, [
Validators.required,
Validators.pattern(/^(?:http(s)?://)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/)
]],
image: [null, Validators.required],
features: this.fb.array([this.fb.control('', Validators.required)])
});
beforeSubmit(): FormData {
const formData = new FormData();
formData.append('link', this.link.value);
formData.append('image', this.image.value);
formData.append('features', this.features.value);
return formData;
}
submit() {
console.info('submit');
const formData = this.beforeSubmit() as FormData;
this.ss.postSite(formData).subscribe(
response => {
console.info(response);
}
);
}
и сервис
postSite(input: FormData) {
console.info('posting');
return this.http.post<Site>(this.API_URL, input, this.HEADERS).pipe(
catchError(this.handleError)
);
}
Укажите функцию добавления полей в массив.
он просто помещает пустой FormControl в массив функций



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это не проблема с FormArray. FormData отображает массив в строку. Попробуйте использовать это решение.
submit() {
console.info('submit');
const formData = this.formGroup.value;
this.ss.postSite(formData).subscribe(
response => {
console.info(response);
}
);
}
Используйте FormData, когда вам нужно отправить файл с <input type = "file" />
A FormArray aggregates the values of each child FormControl into an array
Вы должны отправить FormControls в соответствии с вводом iuser в FormArray. Если вы это уже делаете, поделитесь этой частью кода
formData.append('features', this.features.value); изменен на
this.features.getRawValue().forEach(e => {
formData.append('features[]', e);
});
Таким образом, мы перебираем rawValue, которые представляют собой массив.
Пожалуйста, предоставьте минимальный воспроизводимый пример, воспроизводящий проблему.