angular2-forms - 验证嵌套表单组

标签 angular2-forms angular-reactive-forms

我使用响应式(Reactive)表单在 Angular 2 中创建了一个表单组。我对此很陌生,所以如果这个问题没有意义,我提前道歉。我在父组中创建了一个嵌套组,它有自己的自定义验证器。在下面的代码片段中,嵌套组是 customRolesGroup。验证器适用于嵌套表单组,但父表单有一个控件也调用相同的验证方法。我遇到的问题是,每当父控件调用验证方法时,我需要它自动将嵌套组错误设置为 null 或 false。

我是否可以将嵌套组控件从父控件传递给验证器(customRoleValidation)或将嵌套表单控件错误修补为空?

public createNewForm(event: string) : FormGroup {
      this.addUserForm = this.fb.group({
          firstName: ['',
              [   Validators.required,
                  Validators.maxLength(AddUserConstants.maxLengthName)
              ]],
          lastName: ['',
              [   Validators.required,
                  Validators.maxLength(AddUserConstants.maxLengthName)]
              ],
          email: ['',
              [   Validators.required,
                  Validators.maxLength(AddUserConstants.maxLengthEmail),
                  Validators.pattern(AddUserConstants.emailPattern),
              ]],
          roleSelection: [AddUserConstants.roleCustom,
              [   Validators.required,
                  this.customRoleValidation
              ]],
          admin: '',
          customRolesGroup: this.fb.group({
              salesPerson: '',
              inventoryManager: '',
              creativeReviewer: '',
              reporter: '',
              observer: '',
          }, {validator: this.customRoleValidation}),
      });

      this.addEditButtonText = AddUserConstants.addUserCreateButton;
      this.addEditDBCall = AddUserConstants.addEvent;
      this.modalTitle = AddUserConstants.addUserTitle;


      return this.addUserForm;

  }
}


public customRoleValidation(c: AbstractControl) : {[key: string]: boolean} | null {

    let rolesSelectedCounter : number = 0;
    let noCustomRolesSelected : boolean;

    Object.keys(c.value).map(function(key) {
        if (c.value[key] == "" || c.value[key] == false) {
            rolesSelectedCounter++;
        }
        rolesSelectedCounter == Object.keys(c.value).length ? noCustomRolesSelected = true :                                    noCustomRolesSelected = false;
    });

    if (typeof c.parent !== 'undefined') {
        if (noCustomRolesSelected && c.root.value.roleSelection == AddUserConstants.roleCustom) {
            return { 'noCustomRoleSelected': true };
        } else {
            return null;
        }
    }
}

最佳答案

您可以从父控件而不是嵌套表单组中调用 this.customRoleValidation。在那里您可以获得父控件和嵌套表单组控件。

关于angular2-forms - 验证嵌套表单组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104001/

相关文章:

javascript - Angular 2 : Unable to create custom validator class

Angular 2 react 形式 - 从 formControlName 传递一个值

angular - 订阅 Angular react 形式的输入错误

导入 mat-checkbox 时出现 Angular Material 错误

angular - 如何从模板访问当前的 FormControl

angular - 单选按钮切换不适用于 react 形式

Angular2 - 不同级别组件之间的持久服务

javascript - Angular 2 - 检查默认值是否已更改

javascript - 在 RC6 中升级到 @angular/forms

Angular 2+ Material mat-chip-list formArray验证