Невозможно добавить еще одно свойство в угловой запрос вызова 5 - PullRequest
0 голосов
/ 13 июня 2018

Я задал вопрос несколько дней назад о моем сервисе 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);
}

1 Ответ

0 голосов
/ 13 июня 2018

Это потому, что ваш API возвращает массив объектов.У меня обычно есть модель, созданная для целей подкачки, со свойством, которое содержит общее количество элементов, и другим свойством с элементами массива.Например (c #):

public class PageModel 
{
    public int TotalCount { get;set; }
    public List<MyModel> Items { get;set; }
}

И та же модель в Angular, чтобы сопоставить ее с

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...