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;
}