Angular 复选框列表不起作用
Angular Checkbox List not working
我想创建一个复选框列表,如下所示。我想显示一个复选框和名称,在提交时我想获取所有选定的值。我无法在复选框上显示名称和设置选定值。
[] Jim
[x] Mondo
[] Ann
我创建了这段代码:
<div *ngIf="formSubmitted && teamForm.pristine" class = "submitted"> Form submitted successfully. </div>
<div class="team">
<form [formGroup]="teamForm" (ngSubmit)="onFormSubmit()">
<div class="all-emp">
<b> Employees in Team :{{empFormArray.controls.length}}</b><br><br>
<div formArrayName="empFormArray">
<div *ngFor = "let emp of empFormArray.controls; let idx = index" [formGroupName]="idx" class="employee">
<p> <b>Employee : {{idx + 1}}</b> </p>
<p>Emp Id : <input type="checkbox" [value]="emp.isSelected" formControlName="name">{{emp.name}}</p>
</div>
</div>
</div> <br/>
<button [disabled]="teamForm.invalid">SUBMIT</button>
这是我的组件 class。请检查我的员工方法:
export class CheckboxlistComponent implements OnInit {
teamForm:FormGroup;
formSubmitted = false;
constructor(
private formBuilder:FormBuilder) {
}
ngOnInit() {
this.createTeamForm();
this.addEmployee('00', true);
this.addEmployee('99', false);
this.addEmployee('77', false);
}
createTeamForm(){
this.teamForm = this.formBuilder.group({
empFormArray: this.formBuilder.array([])
});
}
get empFormArray(): FormArray{
return this.teamForm.get('empFormArray') as FormArray;
}
addEmployee(name, selected){
let obj = {
name: name,
isSelected: selected
}
let fg = this.formBuilder.group({
name: [obj]
});
this.empFormArray.push(fg);
}
onFormSubmit() {
let data = JSON.stringify(this.teamForm.value);
console.log(data);
this.formSubmitted = true;
// this.teamForm.reset();
}
}
我建议使用 https://vitalets.github.io/checklist-model/。这使得使用清单变得非常容易。
您正在将包含您 name
和 isSelected
的对象 name
推送到您的 formArray:
let obj = {
name: name,
isSelected: selected
}
let fg = this.formBuilder.group({
name: [obj] // here!
});
this.empFormArray.push(fg);
您想要的是将 obj
原样推送到 formArray,因此:
let fg = this.formBuilder.group({
name: name,
isSelected: selected
});
您还需要修改模板并将复选框中的表单控件设置为 isSelected
而不是 name
,并删除 [value]
。另请注意,我们需要在模板中使用 controls
来获取您的员工姓名。所以改变:
<input type="checkbox" [value]="emp.isSelected" formControlName="name">{{emp.name}}
至:
<input type="checkbox" formControlName="isSelected">{{emp.controls.name.value}}
这应该可以解决您的问题:)
StackBlitz
我想创建一个复选框列表,如下所示。我想显示一个复选框和名称,在提交时我想获取所有选定的值。我无法在复选框上显示名称和设置选定值。
[] Jim
[x] Mondo
[] Ann
我创建了这段代码:
<div *ngIf="formSubmitted && teamForm.pristine" class = "submitted"> Form submitted successfully. </div>
<div class="team">
<form [formGroup]="teamForm" (ngSubmit)="onFormSubmit()">
<div class="all-emp">
<b> Employees in Team :{{empFormArray.controls.length}}</b><br><br>
<div formArrayName="empFormArray">
<div *ngFor = "let emp of empFormArray.controls; let idx = index" [formGroupName]="idx" class="employee">
<p> <b>Employee : {{idx + 1}}</b> </p>
<p>Emp Id : <input type="checkbox" [value]="emp.isSelected" formControlName="name">{{emp.name}}</p>
</div>
</div>
</div> <br/>
<button [disabled]="teamForm.invalid">SUBMIT</button>
这是我的组件 class。请检查我的员工方法:
export class CheckboxlistComponent implements OnInit {
teamForm:FormGroup;
formSubmitted = false;
constructor(
private formBuilder:FormBuilder) {
}
ngOnInit() {
this.createTeamForm();
this.addEmployee('00', true);
this.addEmployee('99', false);
this.addEmployee('77', false);
}
createTeamForm(){
this.teamForm = this.formBuilder.group({
empFormArray: this.formBuilder.array([])
});
}
get empFormArray(): FormArray{
return this.teamForm.get('empFormArray') as FormArray;
}
addEmployee(name, selected){
let obj = {
name: name,
isSelected: selected
}
let fg = this.formBuilder.group({
name: [obj]
});
this.empFormArray.push(fg);
}
onFormSubmit() {
let data = JSON.stringify(this.teamForm.value);
console.log(data);
this.formSubmitted = true;
// this.teamForm.reset();
}
}
我建议使用 https://vitalets.github.io/checklist-model/。这使得使用清单变得非常容易。
您正在将包含您 name
和 isSelected
的对象 name
推送到您的 formArray:
let obj = {
name: name,
isSelected: selected
}
let fg = this.formBuilder.group({
name: [obj] // here!
});
this.empFormArray.push(fg);
您想要的是将 obj
原样推送到 formArray,因此:
let fg = this.formBuilder.group({
name: name,
isSelected: selected
});
您还需要修改模板并将复选框中的表单控件设置为 isSelected
而不是 name
,并删除 [value]
。另请注意,我们需要在模板中使用 controls
来获取您的员工姓名。所以改变:
<input type="checkbox" [value]="emp.isSelected" formControlName="name">{{emp.name}}
至:
<input type="checkbox" formControlName="isSelected">{{emp.controls.name.value}}
这应该可以解决您的问题:)