这通常是因为表单控件未被标记为“已触摸”。为了解决这个问题,您可以手动标记表单控件为“已触摸”,以便触发自定义验证。 下面是一个示例,其中验证函数“myCustomValidator”将在触摸表单控件时触发:
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-my-form',
templateUrl: './my-form.component.html',
styleUrls: ['./my-form.component.css']
})
export class MyFormComponent implements OnInit {
myForm: FormGroup;
constructor(private fb: FormBuilder) {}
ngOnInit(): void {
this.myForm = this.fb.group({
email: ['', [Validators.required, Validators.email]]
});
}
// 自定义验证函数
myCustomValidator(controlName: string) {
const control = this.myForm.get(controlName);
// 检查表单控件是否被触摸
if (control.touched && control.errors) {
// ... 做出你的自定义验证逻辑 ...
return { myCustomError: true };
} else {
return null;
}
}
}
在模板中,您需要手动标记表单控件为“已触摸”: