取消选中角度7的表单组中的所有框

时间:2019-07-15 17:35:10

标签: angular checkbox angular7 angular-reactive-forms uncheck

我需要在一个表单组中有一个复选框,以便unchecks所有checkboxes都在同一表单组中,并保持我的验证。

我的 TS文件中有:

 initForm() {
   this.financialSectionSix = this.formBuilder.group({
   medicaidOrSssi: [false],
   snap: [false],
   freeOrReducedPriceLunch: [false],
   tanf: [false],
   wic: [false],
   noneOfTheAbove: [false]
  });
}

在我的 HTML 中,我有这个:

<div [hidden]="selectedSectionGroup.sectionSix" class="tab-pane fade show 
active"
id="{{financialSectionEnum.SECTION_SIX}}" role="tabpanel">
<form [formGroup]="financialSectionSix">

<label class="form-check-label" for="financial1">
  <input required formControlName="medicaidOrSssi" id="medicaidOrSssi" 
    class="form-check-input"
    data-hint="yes" type="checkbox" value="true">
  Medicaid or Supplemental Security Income (SSI)
</label>


<label class="form-check-label" for="cada-form-student-financial- 
  section-6-1-2">
  <input required formControlName="snap" id="snap" class="form-check- 
    input" data-hint="yes" type="checkbox"
     value='true'>
  Food Stamps or Supplemental Nutrition Assistance Program (SNAP)
  </label>

<label class="form-check-label" for="cada-form-student-financial- 
 section-6-1-6">
  <input required formControlName="noneOfTheAbove" id="noneOfTheAbove" 
    class="form-check-input" data-hint="yes" type="checkbox" value='true' 
    id="cada-form-student-financial-section-6-1-6"> None of the Above
  </label>
 </form>
</div>

我需要最后一个输入字段仅uncheck checkboxes此表单组中的所有其他人,

我还需要保持验证,使用ngModel会引起问题,因为我的表单controls无法注册。

1 个答案:

答案 0 :(得分:2)

您可以将最后一个复选框保留为自己的控件(未注册到表单组),并仅侦听该复选框上的change事件: 例如:

<input required formControlName="noneOfTheAbove" id="noneOfTheAbove" 
class="form-check-input" data-hint="yes" type="checkbox" value='true' 
id="cada-form-student-financial-section-6-1-6" (change)="unselectAll()"> 
None of the Above

在您的component.ts文件中:

unselectAll() {
   this.form.patchValue({
   medicaidOrSssi: false,
   snap: false,
   freeOrReducedPriceLunch: false, 
   tanf: false,
   wic: false
 });
}