angular - 如何将额外的参数传递给 Angular 中的异步验证器(响应式(Reactive)表单)?

标签 angular angular-reactive-forms angular-validation

我有以下异步验证器。如果我想将它用于 react 形式,我必须将它作为第三个参数传递

slug: [null, [Validators.required], [CustomValidators.slug]],

如何将额外的参数传递给验证器?

import {FormControl} from "@angular/forms";

interface IValidation {
    [key: string]: boolean;
}

export class CustomValidators {

static slug(control: FormControl) {
    const q = new Promise<IValidation>((resolve, reject) => {
        setTimeout(() => {
            if (control.value === 'TEST') {
                resolve({'duplicated': true});
            } else {
                resolve(null);
            }
        }, 1000);
    });
    return q;
}
}

如果我将它用作

slug: [null, [Validators.required], [CustomValidators.slug('string param')]],

问题是第一个参数是控件。

最佳答案

像这样写你的验证:

static slug(param: string) {
  return (control: FormControl) => {
    const q = new Promise<IValidation>((resolve, reject) => {
      setTimeout(() => {
        if (control.value === 'TEST') {
          resolve({'duplicated': true});
        } else {
          resolve(null);
        }
      }, 1000);
    });
    return q;
  };
}

关于angular - 如何将额外的参数传递给 Angular 中的异步验证器(响应式(Reactive)表单)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599070/

相关文章:

javascript - Angular 2 中的动态绑定(bind)

Angular 5 : Module not found: Error: Can't resolve '@angular/forms/src/validators'

通过 Switch Case 处理 Angular Reactive Form 错误

angular - 当焦点从 Angular 输入中移出时触发验证?

angular - 异步验证器无法在 Angular 中使用模板驱动的表单

angular - 如何正确地将Docker Compose放置在与项目/dockerfile不同的路径中?

javascript - 在 Angular 中禁用 ngFor 中的一个按钮

angular - 如何将任何 URL 与 HttpTestingController.expectOne 匹配?

ionic2 - Angular 4 给出错误 "No value accessor for form control with unspecified name attribute"

Angular react 形式 : Cannot find control with path: