获得值后如何将 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)]);
希望对您有所帮助。
如果我在 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)]);
希望对您有所帮助。