Angular 角度反应式表单自定义验证:第一次更改不起作用时更新

Angular 角度反应式表单自定义验证:第一次更改不起作用时更新,angular,angular-reactive-forms,Angular,Angular Reactive Forms,我已经在我的反应式表单中实现了一个自定义验证,基本上,当字段长度达到某个限制时,它将显示一个错误 this.formGroup = new FormBuilder().group({ comment: [null, { validators: [ValidateCommentLength], updateOn: 'change' }] }) HTML 问题 问题是nx error仅在触摸输入时才会显示。但只有当我们模糊了形式,输入才会被

我已经在我的反应式表单中实现了一个自定义验证,基本上,当字段长度达到某个限制时,它将显示一个错误

this.formGroup = new FormBuilder().group({
     comment: [null, {
        validators: [ValidateCommentLength],
        updateOn: 'change'
      }]
  })
HTML

问题 问题是
nx error
仅在触摸输入时才会显示。但只有当我们模糊了形式,输入才会被触动

解决方案 验证程序使输入无效后,手动触发

导出函数ValidateCommentLength(控件:AbstractControl){
if(控制值){
如果(!control.value.replace(/\s/g,“”).length){
返回null;
}
剩余常数=最大长度-control.value.LENGTH;
如果(!剩余| |数学符号(剩余)=-1){
control.markAsTouched()
返回{CommentError:true};
}
}
返回null;
}
在上面我刚刚添加了
control.markAsTouched()
,现在验证工作如您所期望的那样


请为ValidateCommentLength添加代码,有什么问题吗?@OwenKelvin补充道validator@MehdiShakeri不正确,我有自定义表单验证程序,请检查更新的question@iambatman哪个库是nx错误的
<textarea
            autocomplete="off"
            maxlength="3600"
            nxInput
            (ngModelChange)="valueChange($event)"
            type="text"
            [formControlName]="'comment'"
          ></textarea>
          <nx-error nxFormfieldError *ngIf="formGroup.get('comment').invalid" appearance="text">
            Maximum comment length is exceeded 
          </nx-error>
        </nx-formfield>
import { AbstractControl } from '@angular/forms';

const MAX_LENGTH =  2;

    export function ValidateCommentLength(control: AbstractControl) {
    
        if (control.value) {
            if (!control.value.replace(/\s/g, '').length) {
                return null;
            }
            const  remaining = MAX_LENGTH - control.value.length;
            if (!remaining || Math.sign(remaining) === -1) {
                return { CommentError: true };
           }
    
        }
        return null;
    }