У меня был formArray
флажок на моем checkboxForm
, мне нужно отключить кнопку отправки, если нет флажка checked
, я реализовал настраиваемый валидатор на моем checkboxForm
, это то, что я пробовал;
Ts файл
get formReceivedSummons() {
return this.checkboxForm.get('receivedSummons') as FormArray;
}
ngOnInit() {
this.checkboxForm = this.formBuilder.group({
receivedSummons: this.formBuilder.array([])
});
this.getReceivedSummons();
}
getReceivedSummons() {
this.receivedSummonsSubscription = this.inquiryStore.summons$
.subscribe(receivedSummons => {
this.receivedSummons = receivedSummons;
});
}
addCheckboxes() {
this.formReceivedSummons.setValue([]);
this.formReceivedSummons.setValidators([minSelectedCheckboxes(1)]);
this.receivedSummons.data.items.map(x => {
this.formReceivedSummons.push(
this.formBuilder.group({
itemNo: [x.itemNo],
isChecked: false,
}));
});
}
function minSelectedCheckboxes(min = 1) {
const validator: ValidatorFn = (formArray: FormArray) => {
const totalSelected = formArray.controls
.map(control => control.value)
.reduce((prev, next) => (next ? prev + next : prev), 0);
return totalSelected >= min ? null : { required: true };
};
return validator;
}
У меня были валидаторы на formArray
, что this.formReceivedSummons.setValidators([minSelectedCheckboxes(1)]);
это то, что я реализовал в html файле
<form [formGroup]="checkboxForm" (ngSubmit)="submitSelectedCheckbox()">
<ng-container formArrayName="receivedSummons" *ngFor="let summon of formReceivedSummons.controls; let i = index">
<ng-container [formGroupName]="i">
<input type="checkbox" formControlName="isChecked"> {{summon.value.itemNo}}
</ng-container>
</ng-container>
<button [disabled]="!checkboxForm .valid">submit</button>
</form>
моя кнопка checkboxForm была отключена, но если я поставил галочку checkbox
, она должна быть включена, но этого не произошло. Я не уверен, как решить эти проблемы, мог бы использовать какое-нибудь руководство и рекомендации, чтобы решить эту проблему.
Обновить
Основываясь на моем поиске в Google, и это все, что я могу сделать,
addCheckboxes() {
this.formReceivedSummons.setValue([]);
this.receivedSummons.data.items.map(item => {
this.formReceivedSummons.push(
this.formBuilder.group({
itemNo: [x.itemNo]
isChecked: [false, Validators.requiredTrue],
}));
});
}
при использовании Validators.requiredTrue
необходимо выбрать два флажка, затем он включит кнопку, но мое требование: мне нужно выбрать хотя бы один флажок, чем он включит форму отправки кнопки