Angular 异步验证器的状态未反映在表单字段的错误状态中
Angular async validator's state not reflected in form field's error state
我在 zip
字段上有一个异步验证器:
zip: ['', {
validators: [
Validators.required,
Validators.minLength(5),
Validators.maxLength(5)
],
asyncValidators: [
adPostFormValidators.isValidZip(this.locationService)
]
},
],
但是,在我点击离开该字段之前,该字段似乎没有反映出来自异步验证器的错误。例如,这是在我点击之前(null
是该字段的错误状态):
我知道异步验证器有 运行 因为我将它的结果输出到控制台:
然后,当我点击退出或失去焦点时,错误状态现在是准确的:
但是,验证器不再 运行,因为控制台中没有记录任何新内容。
所以似乎因为我正在使用 ChangeDetectionStrategy.OnPush
,所以我不得不手动标记异步验证器以进行检查:
ref.markForCheck()
return { 'Is not a valid zip': { value: control.value } } as ValidationErrors
其中 ref
的类型为 ChangeDetectorRef
。
我在 zip
字段上有一个异步验证器:
zip: ['', {
validators: [
Validators.required,
Validators.minLength(5),
Validators.maxLength(5)
],
asyncValidators: [
adPostFormValidators.isValidZip(this.locationService)
]
},
],
但是,在我点击离开该字段之前,该字段似乎没有反映出来自异步验证器的错误。例如,这是在我点击之前(null
是该字段的错误状态):
我知道异步验证器有 运行 因为我将它的结果输出到控制台:
然后,当我点击退出或失去焦点时,错误状态现在是准确的:
但是,验证器不再 运行,因为控制台中没有记录任何新内容。
所以似乎因为我正在使用 ChangeDetectionStrategy.OnPush
,所以我不得不手动标记异步验证器以进行检查:
ref.markForCheck()
return { 'Is not a valid zip': { value: control.value } } as ValidationErrors
其中 ref
的类型为 ChangeDetectorRef
。