Я задал вопрос несколько дней назад о моем сервисе API здесь
У меня были проблемы с получением правильной модели, когда мой вызов API выглядел следующим образом:
//api call
return this.http.post<IListItem[]>(this.employmentListUrl, body, { headers: head })
.do(data => JSON.stringify(data))
.catch(this.handleError);
и с помощью этого вопроса я заставил его работать так:
//api call
return this.http.post<{ EmploymentList: IListItem[] }>(this.employmentListUrl + "?skip="+skip+"&take="+take, body, { headers: head })
.map(data => data.EmploymentList)
.catch(this.handleError);
То, что "EmploymentList" является свойством бэкэнд-модели .net под названием "ApiModel".У него есть два свойства: «EmploymentList» и «TotalCount» (то есть int).К вашему сведению, я возвращаю весь ApiModel, кстати.
Теперь я также хотел бы иметь свойство TotalCount. Как лучше всего это сделать? Я пытался:
getFilteredEmploymentList(filterStr: string, orgNoParam: string, unitIdParam: string, skip: number, take: number): Observable<IListItem[]> {
//... Params, headers, body...
//api call
return this.http.post<{ EmploymentList: IListItem[], TotalCount: number }>(this.employmentListUrl + "?skip="+skip+"&take="+take, body, { headers: head })
.map(data => data.EmploymentList).map(data => data.TotalCount)
.catch(this.handleError);
}
, но это дает мне ошибку при"data.TotalCount" из: "Свойство" TotalCount "не существует в" ListItem [] ", я думал, что это из-за моего Observable, который имеет тип" ListItem [] ".Поэтому я попытался изменить Observable на «any», но все равно получаю ту же ошибку.
РЕДАКТИРОВАТЬ: я решил эту проблему, создав интерфейс для apimodel и использовал его в запросе API следующим образом:
export interface IEmploymentApiViewModel {
EmploymentList: IListItem[];
TotalCount: number; }
И вызов API выглядит так:
getFilteredEmploymentList(filterStr: string, orgNoParam: string, unitIdParam: string, skip: number, take: number): Observable<IEmploymentApiViewModel> {
//set headers, body...
.....
let url = this.employmentListUrl + "?skip=" + skip + "&take=" + take;
//api call
return this.http.post<IEmploymentApiViewModel>(url, body, { headers: head })
.catch(this.handleError);
}