比方说,我有这样的形式,角度:角:正确的渲染服务器端验证消息的方法
<form [formGroup]="form">
<md-input-container>
<input mdInput formControlName="name" [(ngModel)]="dummy.name" name="name">
<md-error *ngIf="form.controls.name.hasError('required')">This is required</md-error>
</md-input-container>
<md-input-container>
<input mdInput formControlName="email" [(ngModel)]="dummy.email" name="email">
<md-error *ngIf="form.controls.email.hasError('invalid_format')">The email is not valid</md-error>
</md-input-container>
</form>
这是提交给Web服务,为节能,更新等过程的web服务,有检查输入是否正确,并在出现任何问题时返回一些验证消息。比方说,我张贴的形式,让这些验证错误的JSON词典:
{
"name": [
"Middle names are not allowed."
],
"email": [
"The email already exists."
]
}
这是我不清楚应该怎么处理角这种情况。大部分的信息四处建议编写自定义的验证,会做一个异步验证对服务器,例如:
uniqueEmailValidator(control: Control): {[key: string]: any} {
return new Promise (resolve => {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
this.http.get('http://webservice.com/email/unique/', {headers:headers})
.map(res => res.json())
.subscribe(data => {
if(data != null) {
resolve({"duplicate": true})
}
else resolve(null);
})
});
});
}
现在,这意味着我应该对每一个数据块的一个特定的Web服务,可能以我的形式存在。虽然这在某些特定情况下可能是有意义的(比如独特的电子邮件/用户名验证),但我不喜欢用许多只会执行验证任务的服务填充我的Web API的想法,再加上必须在我的角度项目。
一种可能的解决方案,我想通了,是在我的组件保存在服务器错误对象作为一个属性,则有一个角验证器检查阉的特定字段具有错误消息:
public checkServerErrorMessage(control: FormControl):{[key: string]: boolean}{
if("name" in this.serverErrors){
return { serverValidationError: true };
}
return {};
}
然后力验证器使用updateValueAndValidity或某种事物进行刷新。但我不觉得这是正确的。是否有一种“棱角分明”的方法来解决这种情况?