代码之家  ›  专栏  ›  技术社区  ›  hY8vVpf3tyR57Xib

使用角度中具有禁止形式值的数组进行形式验证

  •  0
  • hY8vVpf3tyR57Xib  · 技术社区  · 8 年前

    1. 值不能为空
    2. 该值不能是先前定义的值之一(来自数组 forbiddenValues ).

    我知道我可以很容易地添加所需的验证器,如下所示:

    this.titleForm = this.formBuilder.group({
      'title': ['', Validators.required]
    });
    

    但是,我如何为数组动态添加规则 禁止的价值观 ?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Armen Vardanyan    8 年前

    您需要创建某种工厂进行验证(实际上只是一个lambda):

    this.titleForm = this.formBuilder.group({
       'title': ['', [Validators.required, (control: AbstractControl) => {
           return this.forbiddenValues.indexOf(control.value) === -1 ? null : {'forbiddenValue': true};
        }]
    });
    

    但每次禁用值更改时,您都需要手动触发表单验证,使用 this.titleForm.updateValueAndValidity()

        2
  •  1
  •   R. Richards    8 年前

    如果您想在多个地方集中验证功能,这可能对您有用。

    import { FormGroup, FormBuilder, Validators, AbstractControl, ValidatorFn } from '@angular/forms';
    
    function isForbidden(forbiddenValues: string[]): ValidatorFn {
      return (c: AbstractControl): { [key: string]: boolean } | null => {
        if (forbiddenValues.indexOf(c.value) !== -1) {
          return { 'forbiddenValues': true };
        }
        return null;
      };
    }
    
    @Component({...
    
    this.titleForm = this.formBuilder.group({
      'title': ['', [Validators.required, isForbidden(this.forbiddenValues)]]
    });