【问题标题】:How to override "required" validator in custom control Angular2如何在自定义控件Angular2中覆盖“必需”验证器
【发布时间】:2017-06-22 12:48:33
【问题描述】:

我制作了一个带有多个输入字段的自定义表单控件。我想让我的自定义控件以某种方式验证,如果我将 Validators.required 分配给它,它只有在它里面的所有输入都被填充时才有效。

对整个控件的“要求”更高级别。

【问题讨论】:

    标签: validation angular angular2-forms


    【解决方案1】:

    创建自己的自定义验证器,在创建 formGroup 时将其放入 2 参数中。在自定义验证器中,您可以遍历所有控件然后获取值 -> 根据需要验证值。

    在线演示:https://plnkr.co/edit/pcXsxP?p=preview

    app.component.ts

    import { Component, OnInit } from '@angular/core';
    import { FormGroup, FormBuilder } from '@angular/forms'
    
    import { CustomValidators } from './custom.validators';
    
    @Component({
      selector: 'app-root',
      template: `
        <form (ngSubmit)="onSubmit()" novalidate [formGroup]="fg">
          <div><input type="text" formControlName="input1"></div>
          <div><input type="text" formControlName="input2"></div>
          <div><input type="text" formControlName="input3"></div>
          <div><input type="text" formControlName="input4"></div>
          <div><input type="text" formControlName="input5"></div>
          <button type="submit">Submit</button>
          <p>Status {{ fg.valid }}</p>
        </form>
      `
    })
    export class AppComponent implements OnInit {
      fg: FormGroup;
      constructor(private fb: FormBuilder) {}
    
      ngOnInit() {
    
        this.fg = this.fb.group({
          input1: '',
          input2: '',
          input3: '',
          input4: '',
          input5: '',
        }, {
          validator: CustomValidators.multipleInputRequired
        });
    
      }
    
      onSubmit() {
        console.log(this.fg);
      }
    }
    

    custom.validator.ts

    import { FormGroup } from '@angular/forms';
    
    export class CustomValidators {
      static multipleInputRequired(fg: FormGroup) {
        let controls = fg.controls;
        let valid = true;
        if (controls) {
          for (let c in controls) {
            if (controls[c].value.trim() == '') {
              valid = false;
            }
          }
        }
        return valid ? null : {
          multipleInputRequired: true
        };
      }
    }
    

    【讨论】:

    • 如果有一个示例验证器和使用场景,答案会好很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2014-04-16
    • 1970-01-01
    • 2017-10-03
    • 2017-12-24
    相关资源
    最近更新 更多