【问题标题】:Ionic 3 check one least checkbox selected [duplicate]Ionic 3选中至少一个复选框[重复]
【发布时间】:2018-05-09 01:14:31
【问题描述】:

我有一个带有 3 个复选框字段的 Ionic 3 表单:

<form [formGroup]="bookingForm" (ngSubmit)="addBooking()">
<ion-card>
  <ion-card-content>
    <ion-item-group formGroupName="period">
      <ion-list>
        <ion-list-header>
          Select the Period:
        </ion-list-header>
        <ion-item>
          <ion-label>Morning</ion-label>
          <ion-checkbox formControlName="morning"></ion-checkbox>
        </ion-item>
        <ion-item>
          <ion-label>Afternoon</ion-label>
          <ion-checkbox formControlName="afternoon"></ion-checkbox>
        </ion-item>
        <ion-item>
          <ion-label>Night</ion-label>
          <ion-checkbox formControlName="night"></ion-checkbox>
        </ion-item>
      </ion-list>
    </ion-item-group>
  </ion-card-content>
</ion-card>
<button ion-button color="primary" block type="submit" [disabled]="!bookingForm.valid">Add</button>

我想验证用户是否至少选择了一个复选框。

这是我的带有表单构建器代码的 TS 文件:

  constructor(
    private formBuilder: FormBuilder
  ) {
    this.bookingForm = this.formBuilder.group({
      //... other fields in the form ...
      period: this.formBuilder.group(
        {
          morning: false,
          afternoon: false,
          night: false
        },
        Validators.requiredTrue
      )
    });
  }

验证器未按预期工作。添加按钮默认启用,用户可以在不选中任何复选框的情况下提交表单。

【问题讨论】:

    标签: angular forms typescript ionic-framework


    【解决方案1】:

    你需要写一个组验证器:

      constructor(
        private formBuilder: FormBuilder
      ) {
        this.bookingForm = this.formBuilder.group({
          //... other fields in the form ...
          period: this.formBuilder.group(
            {
              morning: false,
              afternoon: false,
              night: false
            },
            { 
               validator: (c: AbstractControl)=> {
               if (!c.get('morning').value &&
                   !c.get('afternoon').value && 
                   !c.get('evening').value)
                   return { pickone: true};
              return null;
              }
           })
        });
      }
    

    【讨论】:

    • 感谢您的回复。 “Validators.requiredTrue”不是有效的组验证器?我是否需要为此创建自定义组验证器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2017-07-27
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    相关资源
    最近更新 更多