Forms Angular2:使用FormBuilder验证器的最佳方法。复选框组必需

Forms Angular2:使用FormBuilder验证器的最佳方法。复选框组必需,forms,checkbox,angular,Forms,Checkbox,Angular,我正在使用FormBuilder和ngFormModel在Angular2中构建表单,无法找到一种优雅的方法来验证复选框组中是否选中了一个或多个复选框。我不想在使用复选框组的任何地方都编写自定义组件方法来验证复选框组。理想情况下,最好将ngFormModel与FormBuilder&Validators结合使用。这是必需的,甚至是自定义验证器。您需要为复选框定义一个组,并指定一个组验证器: this.myForm = this.builder.group({ 'checkboxes': fb

我正在使用FormBuilder和ngFormModel在Angular2中构建表单,无法找到一种优雅的方法来验证复选框组中是否选中了一个或多个复选框。我不想在使用复选框组的任何地方都编写自定义组件方法来验证复选框组。理想情况下,最好将ngFormModel与FormBuilder&Validators结合使用。这是必需的,甚至是自定义验证器。

您需要为复选框定义一个组,并指定一个组验证器:

this.myForm = this.builder.group({
  'checkboxes': fb.group({
    checkbox1: [ '' ],
    checkbox2: [ '' ]
  }, {validator: this.checkboxRequired})
});
checkboxRequired(group: FormGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value;
    if (val) {
      valid = true;
      break;
    }
  }

  if (valid) {
    return null;
  }

  return {
    checkboxRequired: true
  };
}
以及验证程序:

this.myForm = this.builder.group({
  'checkboxes': fb.group({
    checkbox1: [ '' ],
    checkbox2: [ '' ]
  }, {validator: this.checkboxRequired})
});
checkboxRequired(group: FormGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value;
    if (val) {
      valid = true;
      break;
    }
  }

  if (valid) {
    return null;
  }

  return {
    checkboxRequired: true
  };
}
您可以通过以下方式将其与表单链接:

<form [ngFormModel]="myForm">
  Checkbox1: <input type="checkbox" 
    [ngFormControl]="myForm.controls.checkboxes.controls.checkbox1"/>
  Checkbox2: <input type="checkbox" 
    [ngFormControl]="myForm.controls.checkboxes.controls.checkbox2"/>
</form>

您需要为复选框定义组并指定组验证器:

this.myForm = this.builder.group({
  'checkboxes': fb.group({
    checkbox1: [ '' ],
    checkbox2: [ '' ]
  }, {validator: this.checkboxRequired})
});
checkboxRequired(group: FormGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value;
    if (val) {
      valid = true;
      break;
    }
  }

  if (valid) {
    return null;
  }

  return {
    checkboxRequired: true
  };
}
以及验证程序:

this.myForm = this.builder.group({
  'checkboxes': fb.group({
    checkbox1: [ '' ],
    checkbox2: [ '' ]
  }, {validator: this.checkboxRequired})
});
checkboxRequired(group: FormGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value;
    if (val) {
      valid = true;
      break;
    }
  }

  if (valid) {
    return null;
  }

  return {
    checkboxRequired: true
  };
}
您可以通过以下方式将其与表单链接:

<form [ngFormModel]="myForm">
  Checkbox1: <input type="checkbox" 
    [ngFormControl]="myForm.controls.checkboxes.controls.checkbox1"/>
  Checkbox2: <input type="checkbox" 
    [ngFormControl]="myForm.controls.checkboxes.controls.checkbox2"/>
</form>

由于API略有变化。下面是上述答案的稍微更新版本。这是故意的有点冗长

this.myForm = this._fb.group({
        myName: ['', [<any>Validators.required, <any>Validators.minLength(5)]],
        role: new FormGroup({
             prog:  new FormControl(null),
             mgr:  new FormControl(null),
             designer:  new FormControl(null),
          }, this.CheckGroupValidation)
  });

由于API略有变化。下面是上述答案的稍微更新版本。这是故意的有点冗长

this.myForm = this._fb.group({
        myName: ['', [<any>Validators.required, <any>Validators.minLength(5)]],
        role: new FormGroup({
             prog:  new FormControl(null),
             mgr:  new FormControl(null),
             designer:  new FormControl(null),
          }, this.CheckGroupValidation)
  });