在Angular中使用自定义表单验证器时,需要注意表单方法(如form.reset()
和form.submit()
)可能会失效。这是因为当表单验证失败时,Angular会自动将表单设置为无效状态,从而禁用表单方法。为了解决这个问题,我们需要手动标记表单为有效状态,以恢复表单方法的功能。
下面是一个示例,演示如何手动标记表单为有效状态:
import { Component } from '@angular/core';
import { FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-my-form',
templateUrl: './my-form.component.html',
})
export class MyFormComponent {
myForm = new FormGroup({
email: new FormControl('', [Validators.required, Validators.email]),
password: new FormControl('', [Validators.required, Validators.minLength(8)]),
});
onSubmit() {
if (this.myForm.invalid) {
// 手动标记表单为有效状态,以恢复表单方法的功能
this.myForm.markAsTouched();
return;
}
// 在这里执行表单提交的操作
console.log('submitting form', this.myForm.value);
}
}
在上面的示例中,如果表单验证失败,我们手动标记表单为已触摸状态(通过调用markAsTouched()
方法),以允许表单方法重新启用。请注意,还有其他标记表单状态的方法可用,如markAsDirty()
和updateValueAndValidity()
,它们可以根据需要使用。