【发布时间】:2018-01-18 03:54:17
【问题描述】:
我有一个 Angular 5 应用程序,它从 REST API 检索用户事件数据。见吹角码:
服务
/** GET user events from the server */
getCalendarEvents(): Observable<UserEvents[]> {
return this.http.get<UserEvents[]>(this.apiUrl + '/user_events')
.pipe(
tap(items => console.log(items)),
catchError(this.handleError('getEvents', []))
);
}
组件
userEventsList: UserEvents[] = [];
getCalendarEvents(): void {
this.calendarService.getCalendarEvents()
.subscribe(data => {
// console.log(data[0].user.FullName);
this.userEventsList = data;
});
}
UserEvents 接口:
export interface UserEvents {
user: User;
bookings: Event[];
}
export interface User{
Id: string;
FullName: string;
Email: string;
}
export interface Event {
Id: string;
StartTime: string;
EndTime: string;
Description: string;
}
API 响应
[
{
"User": {
"Id": "123abc",
"FullName": "First Person",
"Email": "first.person@example.com"
},
"Events": [
{
"Id": "eventId-1",
"StartTime": "2018-01-01T00:00:00",
"EndTime": "2018-01-01T00:00:00",
"Description": "Event 1"
},
{
"Id": "eventId-2",
"StartTime": "2019-01-01T00:00:00",
"EndTime": "2019-01-01T00:00:00",
"Description": "Event 2"
}]
},
{
"User": {
"Id": "user2",
"FullName": "Second user",
"Email": "second.user@example.com"
},
"Events": []
},
.
.
.
]
问题是返回的实体 'UserEvents[]' 没有填满。 在组件中尝试访问对象user->console.log(data[0].user.FullName)时,产生错误提示不存在。
似乎HttpClient 模块未能正确映射实体。
在httpclient module 的角度指南中解释了如何指定实体类型以返回普通实体。 就我而言,它是由其他实体形成的更复杂的实体,也许这就是重点?
我错过了什么吗?我可以自己映射实体吗?
感谢您的帮助:)
【问题讨论】:
-
UserEvents接口和api响应的结构不相似。与您在组件中记录订阅箭头函数后发现的 api 响应相同吗? -
UserEvents接口如何才能让角度正确映射 json 数据? -
okey 尝试将
userEventsList类型更改为any[]看看会发生什么 -
@Ashraful Islam,同样的事情也会发生。整个 json 对象列表直接传回组件,而不是映射到 UserEvents
-
尝试在 getCalendarEvents() 订阅方法中记录
data,看看您是否获得了正确的数据。我认为getCalendarEventssubscribe 方法中的数据不正确
标签: javascript angularjs json angular