在Angular 8中,可以使用FormGroup和FormArray来捕获复选框的值并以对象数组的形式提交表单。
首先,在组件的HTML模板中,创建一个表单并为复选框绑定FormControl和formControlName。使用FormArray来跟踪复选框的选中状态。例如:
接下来,在组件的Typescript文件中,创建和初始化表单。定义一个checkboxes的FormArray,并将其添加到FormGroup中。然后,在提交表单时,遍历FormArray中的所有复选框,并将选中的复选框的值添加到一个对象数组中。例如:
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, FormArray } from '@angular/forms';
@Component({
selector: 'app-my-form',
templateUrl: './my-form.component.html',
styleUrls: ['./my-form.component.css']
})
export class MyFormComponent implements OnInit {
myForm: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.myForm = this.fb.group({
checkboxes: this.fb.array([])
});
// 添加复选框选项
this.addCheckboxes();
}
addCheckboxes() {
const checkboxes = this.myForm.get('checkboxes') as FormArray;
// 例如,添加三个复选框选项
['Apple', 'Banana', 'Orange'].forEach((o, i) => {
const checkbox = this.fb.control(false);
checkboxes.push(checkbox);
});
}
onSubmit() {
const selectedCheckboxes = this.myForm.value.checkboxes
.map((checked, i) => checked ? ['Apple', 'Banana', 'Orange'][i] : null)
.filter(value => value !== null);
console.log(selectedCheckboxes);
}
}
在上面的代码中,addCheckboxes()
方法用于根据需要添加复选框选项。在onSubmit()
方法中,我们使用map()
和filter()
方法将选中的复选框的值添加到selectedCheckboxes
数组中。
最后,记得在组件的模块文件中导入和添加FormsModule和ReactiveFormsModule,以便使用表单和响应式表单的功能。
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
FormsModule,
ReactiveFormsModule
]
})
export class MyFormModule { }
以上是在Angular 8中以对象数组的形式捕获复选框值的解决方法。