在Angular中,可以使用FormGroup
和FormArray
来创建嵌套表单控件。要将嵌套表单控件添加到FormData
中,可以使用patchValue
方法将表单数据填充到FormData
对象中。以下是一个示例代码:
首先,在组件中创建嵌套表单控件:
import { Component } from '@angular/core';
import { FormGroup, FormControl, FormArray } from '@angular/forms';
@Component({
selector: 'app-my-form',
templateUrl: './my-form.component.html',
styleUrls: ['./my-form.component.css']
})
export class MyFormComponent {
myForm: FormGroup;
constructor() {
this.myForm = new FormGroup({
name: new FormControl(''),
email: new FormControl(''),
address: new FormGroup({
street: new FormControl(''),
city: new FormControl(''),
state: new FormControl(''),
zip: new FormControl('')
}),
phones: new FormArray([])
});
}
addPhone() {
const phones = this.myForm.get('phones') as FormArray;
phones.push(new FormControl(''));
}
removePhone(index: number) {
const phones = this.myForm.get('phones') as FormArray;
phones.removeAt(index);
}
submitForm() {
const formData = new FormData();
formData.append('name', this.myForm.get('name').value);
formData.append('email', this.myForm.get('email').value);
const address = this.myForm.get('address') as FormGroup;
formData.append('street', address.get('street').value);
formData.append('city', address.get('city').value);
formData.append('state', address.get('state').value);
formData.append('zip', address.get('zip').value);
const phones = this.myForm.get('phones') as FormArray;
phones.controls.forEach((control, index) => {
formData.append(`phone${index}`, control.value);
});
// 将 formData 发送到服务器
}
}
然后,在模板中使用嵌套表单控件:
在submitForm
方法中,我们使用FormData
对象将表单数据添加到formData
对象中。对于嵌套表单控件,我们可以使用get
方法获取嵌套表单的值,并将其添加到formData
对象中。最后,我们可以将formData
对象发送到服务器。