Angular5:带有分页,对象映射的REST API服务

时间:2018-07-02 13:39:29

标签: angular typescript angular-services

我向我的REST API后端添加了分页。不,我必须更改我的角度服务。

api现在将返回json,如下所示:

{
    "count": 0,
    "next": null or url,
    "previous": null or url,
    "results": [..]
}

在更改之前,它只是一个对象数组。

这是我目前的服务,当然不能再使用了

list(): Observable<StudentCourse[]> {
  let url = `${this.url}/student_courses/`;
  return this.httpClient.get<StudentCourse[]>(url, { headers: this.headers })
    .pipe(
      catchError(this.handleError('GET student-course', []))
    );
}

如何以最简单的方式将results映射到对象数组(StudentCourse[])?并将nextprevious的网址直接存储在服务中的变量中,以备后用。

1 个答案:

答案 0 :(得分:1)

您可以创建JSON响应页面包装器接口:

interface IPageResult<T> {
    count: number,
    next: string | null,
    previous: string | null,
    results: T[]
}

然后用它替换原始数组:

list(): Observable<IPageResult<StudentCourse>> {
  let url = `${this.url}/student_courses/`;
  return this.httpClient.get<IPageResult<StudentCourse>>(url, { headers: this.headers })
    .pipe(
      catchError(this.handleError('GET student-course', []))
    );
}

对于previousnext值,您可以在服务或使用者中随时随地访问它们。