Istnieją dwa rodzaje walidacji serwera:
- te globalne (dla całego formularza lub odpowiadające błędu podczas formie uległość)
- Te związane z polami
dla jednego wystarczy wyodrębnić wiadomości z ładunkiem reakcji i umieścić go na własność swojego składnika aby wyświetlić go w odpowiednią Szablon:
@Component({
(...)
template: `
<form (submit)="onSubmit()">
(...)
<div *ngIf="errorMessage">{{errorMessage}}</div>
<button type="submit">Submit</button>
</form>
`
})
export class MyComponent {
(...)
onSubmit() {
this.http.post('http://...', data)
.map(res => res.json())
.subscribe(
(data) => {
// Success callback
},
(errorData) => {
// Error callback
var error = errorData.json();
this.error = `${error.reasonPhrase} (${error.code})`;
}
);
}
}
Zakładam, że ładowność reakcja na błąd jest JSON jeden i odpowiada na następujące kwestie:
{
"code": 422,
"description": "Some description",
"reasonPhrase": "Unprocessable Entity"
}
dla drugiego, można ustawić otrzymał błąd komunikat ciągu poleceń związanych z wejściami formy, jak to opisano poniżej:
@Component({
(...)
template: `
<form [ngFormModel]="myForm" (submit)="onSubmit()">
(...)
Name: <input [ngFormControl]="myForm.controls.name"/>
<span *ngIf="myForm.controls.name.errors?.remote"></span>
(...)
<button type="submit">Submit</button>
</form>
`
})
export class MyComponent {
(...)
constructor(builder:FormBuilder) {
this.myForm = this.companyForm = builder.group({
name: ['', Validators.required ]
});
}
onSubmit() {
this.http.post('http://...', data)
.map(res => res.json())
.subscribe(
(data) => {
// Success callback
},
(errorData) => {
// Error callback
var error = errorData.json();
var messages = error.messages;
messages.forEach((message) => {
this.companyForm.controls[message.property].setErrors({
remote: message.message });
});
}
);
}
}
zakładać, że ładunek odpowiedzi na błędy jest JSON jeden i spełnia następujące:
{
messages: [
{
"property": "name",
"message": "The value can't be empty"
]
}
Więcej szczegółów można rzucić okiem na ten projekt:
Linki wydaje się być martwy. – DDiVita
@DDiVita Naprawiłem linki. – Ergwun