获得值后如何将 angular2 自定义验证器设置为 运行

How to make angular2 custom validators to run after we get the value

如果我在 offerCheck 验证器中传递硬编码值,它工作正常。但是如果我从 api 获取值,空值将在参数中传递。在我们从服务中获取值之前,表单正在执行。请帮我在从 api.

获取值后进行验证检查

this.newOffer = "aaa";
this.oldOffer = "aaa";

constructor(fb: FormBuilder) {
    this.formGroup = fb.group({
      'offer': [null, Validators.compose([Validators.required, this.offerCheck(newOfer, oldOffer)])],
    })

    offerCheck(new, old) {
      return (control: FormControl) => {
        if (new == old) {
          return true;
        }
      }
    }

您想要的可能是 AsyncValidatorFn,这里有一个非常简单的示例来说明如何创建一个:

export const OfferCheck: AsyncValidatorFn = (control: AbstractControl): Observable<boolean> => {

 if (new == old) {
   return Observable.of(this.http.get('/some-endpoint').first().map(res => res.data));
 }
};

您没有提供足够的信息,所以这只是您对它想要的样子的猜测。但它应该会为您指明正确的决定。

另一种方法是在获取数据后使用 setValidators 控件:

this.formGroup.get('offer').setValidators([Validators.required, this.offerCheck(newOfer, oldOffer)]);

希望对您有所帮助。