【发布时间】:2018-12-08 04:49:12
【问题描述】:
我需要将自定义验证器分配给 FormGroup。我可以在创建 FormGroup 时这样做:
let myForm : FormGroup;
myForm = this.formBuilder.group({
myControl1: defaultValue,
myControl2: defaultValue
}, { validator: this.comparisonValidator })
comparisonValidator(g: FormGroup) {
if (g.get('myControl1').value > g.get('myControl2'.value)) {
g.controls['myControl1'].setErrors({ 'value2GreaterThanValue1': true });
return;
}
}
我有一种情况,我需要在实例化 FormGroup 之后添加自定义验证器,所以我尝试在实例化 myForm 之后执行此操作,而不是添加验证器当窗体实例化时:
let myForm : FormGroup;
myForm = this.formBuilder.group({
myControl1: defaultValue,
myControl2: defaultValue
})
this.myForm.validator = this.comparisonValidator;
这给了我一个编译器错误:
Type '(g: FormGroup) => void' is not assignable to type 'ValidatorFn'.
Type 'void' is not assignable to type 'ValidationErrors'.
如何为我的FormGroup 分配一个验证器,以便将formGroup 作为参数传递给我的comparisonValidator 函数?
更新 - 我在comparisonValidator 中添加了一行显示我正在执行setErrors 的位置,以便更清楚地了解我是如何尝试设置验证错误的。
【问题讨论】:
-
可以使用setValidators()添加动态验证器。但特定于特定控件,您可以一次更新
-
您收到此错误是因为您从
comparisonValidator函数返回void。更改函数以在最后一行(不在 if 语句内)返回null,错误应该消失了。
标签: javascript angular typescript angular-reactive-forms angular-validation