【发布时间】:2017-09-12 16:43:06
【问题描述】:
如果登录无效,则会收到以下响应。
Response {
_body: "{
"email": ["The email field is required."],
"password":["The password field is required."]
}",
status: 422, ok: false, statusText: "Unprocessable Entity", headers: Headers
}
我想在 UI 中向用户显示错误。这是我对 observable 的实现。
Class
export class LoginPage
{
signInData: any[];
errors: any[];
...
this.userService.signIn(form.value.email, form.value.password)
.subscribe(
data => this.signedInData = data,
error => this.errors = error._body
);
}
我只是将检索到的 _body 对象设置为 this.errors。如果我尝试如下显示错误,
Template
<ul *ngFor="let error of errors">
<li>{{error}}</li>
</ul>
我收到以下错误。
./LoginPage 类 LoginPage 中的错误 - 内联模板:30:19 导致:找不到不同的支持对象 '{"email":["The email field is required."],"password":["The密码字段是必需的。"]}' 类型为 'string'。 NgFor 只支持绑定到 Arrays 等 Iterables。
我该如何处理?
UPDATE
如果我将订阅更改为:
this.userService.signIn(form.value.email, form.value.password)
.subscribe(
data => this.signedInData = data,
error => this.errors.push(error._body)
);
<ul *ngFor="let error of errors">
<li>{{error}}</li>
</ul>
它成功打印了错误对象。现在我需要访问对象中的值,删除大括号并打印值。怎么样?
WORKING CODE
感谢@echonax,我能够将数据解析为 JSON,检查它是否存在,然后将其一一推送到错误数组中。
this.userService.signIn(form.value.email, form.value.password)
.subscribe(
data => this.signedInData = data,
error =>
{
let err = JSON.parse(error._body);
if(err && err.email && err.email[0]){
this.errors.push(err.email[0]);
}
if(err && err.password && err.password[0]){
this.errors.push(err.password[0]);
}
}
);
<ul *ngFor="let error of errors">
<li>{{error}}</li>
</ul>
【问题讨论】: