获取表单提交时所有 p-checkbox 的状态 (Angular PrimeNG)
Get status of all p-checkbox on form submit (Angular PrimeNG)
我的表单中每个字段旁边都有多个复选框,复选框数据不会保存。在提交表单之前,我必须弄清楚所有复选框都已选中。如果选中所有复选框,我将得到 true,否则为 false。我需要以动态方式进行,因为我的表单中有大量字段。鉴于我的 html 代码的某些部分...
<div class="ui-g-12 ui-md-12">
<div class="ui-g-12 ui-md-11">
<span class="md-inputfield">
<input type="text" pInputText
formControlName="sequenceOfTotal">
<label>Sequence of Total(27)</label>
</span>
</div>
<div class="ui-g-12 ui-md-1">
<span class="md-inputfield">
<p-checkbox binary="true">
</p-checkbox>
</span>
</div>
</div>
我不完全理解您的用例以及 "dynamic" 解决方案需要如何,但是由于您已经在使用 formBuilder,您可以在您的包含每个复选框值的表单(默认值为 false,Validators.required)。
例如:
// HTML
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb1']"></p-checkbox>
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb2']"></p-checkbox>
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb3']"></p-checkbox>
// TS
this.form = fb.group({
sequenceOfTotal: [''],
checkboxes: fb.group({
cb1: [false, Validators.required],
cb2: [false, Validators.required],
cb3: [false, Validators.required],
}),
});
然后,当您需要确保每个复选框都被选中时,您可以验证
this.form.controls.checkboxes.valid
当然,如果您当前正在使用 "this.form.value" 生成发送到后端的数据,那么您可以为复选框创建第二个表单或将您的表单组一分为二。
this.form = fb.group({
data: fb.group({
sequenceOfTotal: [''],
},
checkboxes: fb.group({
cb1: [false, Validators.required],
cb2: [false, Validators.required],
cb3: [false, Validators.required],
}),
});
并对您的模板/函数进行相应的更改。
@Beerbossa 我用另一种方式做了,正如我所说的,我的表格中有大量字段。我在 [(ngModel)] 中为每个复选框
取了一个数组并将数组元素设置为 false
basicCheckboxes: any[] = [];
setCheckBoxes() {
for (let i = 0; i < 20; i++) {
this.basicCheckboxes[i] = false;
}
}
HTML部分:
<div class="ui-g-12 ui-md-12">
<div class="ui-g-12 ui-md-11">
<span class="md-inputfield">
<input type="text" pInputText formControlName="sequenceOfTotal">
<label>Sequence of Total (27)*</label>
</span>
</div>
<div class="ui-g-12 ui-md-1">
<span class="md-inputfield">
<p-checkbox binary="true" [(ngModel)]="basicCheckboxes[17]"
[ngModelOptions]="{standalone: true}">
</p-checkbox>
</span>
</div>
</div>
然后最后在提交表单时,我正在检查是否选中了所有复选框
if (this.basicCheckboxes.every(val => val === true)) {
console.log('All check box selected');
}
我的表单中每个字段旁边都有多个复选框,复选框数据不会保存。在提交表单之前,我必须弄清楚所有复选框都已选中。如果选中所有复选框,我将得到 true,否则为 false。我需要以动态方式进行,因为我的表单中有大量字段。鉴于我的 html 代码的某些部分...
<div class="ui-g-12 ui-md-12">
<div class="ui-g-12 ui-md-11">
<span class="md-inputfield">
<input type="text" pInputText
formControlName="sequenceOfTotal">
<label>Sequence of Total(27)</label>
</span>
</div>
<div class="ui-g-12 ui-md-1">
<span class="md-inputfield">
<p-checkbox binary="true">
</p-checkbox>
</span>
</div>
</div>
我不完全理解您的用例以及 "dynamic" 解决方案需要如何,但是由于您已经在使用 formBuilder,您可以在您的包含每个复选框值的表单(默认值为 false,Validators.required)。
例如:
// HTML
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb1']"></p-checkbox>
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb2']"></p-checkbox>
<p-checkbox [formControl]="this.form?.controls['checkboxes']?.controls['cb3']"></p-checkbox>
// TS
this.form = fb.group({
sequenceOfTotal: [''],
checkboxes: fb.group({
cb1: [false, Validators.required],
cb2: [false, Validators.required],
cb3: [false, Validators.required],
}),
});
然后,当您需要确保每个复选框都被选中时,您可以验证
this.form.controls.checkboxes.valid
当然,如果您当前正在使用 "this.form.value" 生成发送到后端的数据,那么您可以为复选框创建第二个表单或将您的表单组一分为二。
this.form = fb.group({
data: fb.group({
sequenceOfTotal: [''],
},
checkboxes: fb.group({
cb1: [false, Validators.required],
cb2: [false, Validators.required],
cb3: [false, Validators.required],
}),
});
并对您的模板/函数进行相应的更改。
@Beerbossa 我用另一种方式做了,正如我所说的,我的表格中有大量字段。我在 [(ngModel)] 中为每个复选框
取了一个数组并将数组元素设置为 falsebasicCheckboxes: any[] = [];
setCheckBoxes() {
for (let i = 0; i < 20; i++) {
this.basicCheckboxes[i] = false;
}
}
HTML部分:
<div class="ui-g-12 ui-md-12">
<div class="ui-g-12 ui-md-11">
<span class="md-inputfield">
<input type="text" pInputText formControlName="sequenceOfTotal">
<label>Sequence of Total (27)*</label>
</span>
</div>
<div class="ui-g-12 ui-md-1">
<span class="md-inputfield">
<p-checkbox binary="true" [(ngModel)]="basicCheckboxes[17]"
[ngModelOptions]="{standalone: true}">
</p-checkbox>
</span>
</div>
</div>
然后最后在提交表单时,我正在检查是否选中了所有复选框
if (this.basicCheckboxes.every(val => val === true)) {
console.log('All check box selected');
}