我有一个表单字段,我尝试使用.setErrors(..)
手动设置自定义错误。它有效。
我正在使用Angular 4.4.6
现在我的用例是我需要清除该字段然后在其上设置错误。我的代码段如下所示:
模板:
<form #myForm="ngForm">
<app-somecomponent name="email" [(ngModel)]="email"></app-somecomponent>
</form>
在我的组件中,我有这个:
export class SomeComponent implements OnInit {
email: Email
.....
// some button in template calls this method passing the form reference
setEmailEmpty(form: NgForm) {
this.email = ''; // set email to empty.
// show error below email field
(<FormControl>form.controls['email']).setErrors({...})
}
}
将电子邮件设置为空后,我看不到自定义错误。
但是如果我使用(<FormControl>form.controls['email']).setValue('')
将电子邮件设置为空,那么我会看到自定义错误。
我做错了什么?使用setValue('')
和直接清除字段有什么区别。
注意:自定义组件实现ControlValueAccessor。
更新
我注意到在设置错误之前等待勾号,如下所示
this.email = ''; // set email to empty.
// wait a tick and then show error below email field
setTimeout(() => {
(<FormControl>form.controls['email']).setErrors({...})
}, 0)