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