Angular 如何从可观测数据中获取正确的数据

Angular 如何从可观测数据中获取正确的数据,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我试图从一个可观察的物体中获取数据,但没有得到正确的数据。 这是对API的get调用 getLastxScans(amount: number): Observable<Scan[]> { return this.http.get<Scan[]>(`${this.ROOT_URL}/Scan/amount/${amount}`); } 当我尝试用此数据填充扫描[]时,它不起作用。 我是否需要深入对象以提取数据? 如果是这样,我该怎么做?我试过这样做

我试图从一个可观察的物体中获取数据,但没有得到正确的数据。 这是对API的get调用

    getLastxScans(amount: number): Observable<Scan[]> {
    return this.http.get<Scan[]>(`${this.ROOT_URL}/Scan/amount/${amount}`);
  }
当我尝试用此数据填充扫描[]时,它不起作用。 我是否需要深入对象以提取数据? 如果是这样,我该怎么做?我试过这样做

    this.deviceService.getLastxScans(this.scanAmount)
      .subscribe(scans => this.scans = scans);
这边

this.deviceService.getLastxScans(this.scanAmount)
    .subscribe(res => this.scans = res.scans);
用法:(因为数组是响应的
scans
键的值)


从评论中,您还可以执行以下操作:

getLastxScans(amount: number): Observable<Scan[]> {
   return this.http.get<Scan[]>(`${this.ROOT_URL}/Scan/amount/${amount}`)
              .pipe(
                 map((res:any) => res.scans)
              );
}
getLastxScans(金额:数字):可观察{
返回this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}`)
.烟斗(
映射((res:any)=>res.scans)
);
}
使用:(因为数组是响应的
键的值)


从评论中,您还可以执行以下操作:

getLastxScans(amount: number): Observable<Scan[]> {
   return this.http.get<Scan[]>(`${this.ROOT_URL}/Scan/amount/${amount}`)
              .pipe(
                 map((res:any) => res.scans)
              );
}
getLastxScans(金额:数字):可观察{
返回this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}`)
.烟斗(
映射((res:any)=>res.scans)
);
}

应该补充一点,我也已经尝试过了。res已经被识别为Scan[],因此它不会将其作为属性更改this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}`)
this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}')
,在这种情况下,api将返回一个对象,而不是一个数组
[]
即使我从方法中删除了可观察对象,仍然没有运气aswell@NicholasK,这就是为什么我更喜欢你的答案。你解释得很好,不客气。这应该很直截了当。您可以使用*ngIf来确定数据是否准备就绪,然后在模板上呈现它。应该补充的是,我也已经尝试过了。res已经被识别为Scan[],因此它不会将其作为属性更改this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}`)到
this.http.get(`${this.ROOT\u URL}/Scan/amount/${amount}')
,在这种情况下,api将返回一个对象,而不是一个数组
[]
即使我从方法中删除了可观察对象,仍然没有运气aswell@NicholasK,这就是为什么我更喜欢你的答案。你解释得很好,不客气。这应该很直截了当。您可以使用*ngIf来确定数据是否准备好,然后在模板上呈现它。您只需要为
get
type参数提供正确的类型,然后推理就可以了:
返回this.http.get(url.pipe(map(res=>res.scans))
您只需要为
get
type参数提供正确的类型,然后推理将对您起作用:
返回这个.http.get(url.pipe(map(res=>res.scans))
getLastxScans(amount: number): Observable<Scan[]> {
   return this.http.get<Scan[]>(`${this.ROOT_URL}/Scan/amount/${amount}`)
              .pipe(
                 map((res:any) => res.scans)
              );
}