【发布时间】:2019-07-10 19:42:45
【问题描述】:
我是 Angular 中的响应式表单的新手。我的表单中有多个复选框数组。当用户单击“全选”按钮时,我需要选择所有复选框。在我的示例中,我想检查所有年龄列表值。当用户单击“取消全选”时,我想取消全选。我试过了,还是不行。
HTML
<form [formGroup]="myForm">
<p>Language</p>
<div *ngFor="let data of languages let i = index">
<input type="checkbox" (change)="onChange(data.name, $event.target.checked)"> {{data.name}}<br>
</div>
<p>Age List</p>
<button (click)="checkAll()">Check all</button>
<button (click)="deselectAll()">Deselect all</button>
<div *ngFor="let data of ages let j = index">
<input type="checkbox" (change)="onAgeChange(data.name, $event.target.checked)"> {{data.name}}<br>
</div>
</form>
<pre>Form values: {{myForm.value | json}}</pre>
应用组件
ages = [{ ageID: 100 ,name: "0 -10 years" }, {ageID: 200 ,name: "10 -20 years" }, {ageID: 300 ,name: "30 -40 years" }, { ageID: 400 ,name: "40 -50 years" }]
languages = [{ langID: 1 ,name: "English" }, {langID: 2 ,name: "Tamil" }, {langID: 3 ,name: "Hindi" }, { langID: 4 ,name: "French" }]
myForm: FormGroup;
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.myForm = this.fb.group({
userage: this.fb.array([]),
userlanguage: this.fb.array([])
});
}
onChange(language: string, isChecked: boolean) {
const languageFormArray = <FormArray>this.myForm.controls.userlanguage;
if (isChecked) {
languageFormArray.push(new FormControl(language));
} else {
let index = languageFormArray .controls.findIndex(x => x.value == language)
languageFormArray .removeAt(index);
}
}
onAgeChange(age : string, isChecked: boolean) {
const ageFormArray = <FormArray>this.myForm.controls.userage;
if (isChecked) {
ageFormArray.push(new FormControl(age));
} else {
let index = ageFormArray.controls.findIndex(x => x.value == age)
ageFormArray.removeAt(index);
}
}
checkAll(){
const languageFormArray = <FormArray>this.myForm.controls.userlanguage;
//console.log(this.myForm.controls['userage'])
this.myForm.controls['userage'].setValue(
this.myForm.controls['userage'].value
.map(value => true)
);
}
这是我迄今为止尝试过的 https://stackblitz.com/edit/angular-butm3h?file=src%2Fapp%2Fapp.component.html
如果有人可以支持我,不胜感激。
【问题讨论】:
-
代码链接不如将实际代码放入问题中有用。
-
什么意思?
-
您的问题没有代码。 “为什么这段代码不起作用?”需要代码。我不会通过链接到代码来尝试找出可能出错的地方。提问者有责任将其归结为这样,以便有人可以快速回答。
-
theMayer-我更新了答案
标签: angular angular-reactive-forms reactive-forms