サーバー側の検証メッセージをレンダリングするための正しいアプローチだが、私は角度でこのフォームを持っているとしましょう:角度:
もちろんのWebサービスがなければならないなど、省のためのウェブサービス、更新、に提出され<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>
入力が正しいことを確認し、問題がある場合に備えていくつかの検証メッセージを返します。のは、私は、フォームをPOSTし、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または何らかのものを使用してリフレッシュする必要があります。しかし、私はこの権利を感じない。このような状況を解決するための "鋭い"アプローチはありますか?