如何在Angular中管道/映射Observable

Ton*_*ong 4 typescript angular angular7

嵌套的对象显示为[object Object],因此我试图通过管道和地图进行投射,但没有任何位置。我已经将模型作为类和接口进行了尝试,但没有帮助。有人可以告诉我我在做什么错吗?谢谢。

功能:

  getClients(customerId: number): Observable<Client[]> {
    let clientUrl = 'SOME_URL';
    return this.http.get<Client[]>(clientUrl)
      .pipe(map(client: Client) => client.address as Address);
  }
Run Code Online (Sandbox Code Playgroud)

型号:

import { Address } from './address.model';

export class Client{
  id: number;
  name: string;
  accountNumber: string;
  addressId: number;
  phoneNumber: string;
  address: Address;
}


export class Address{
  id: number;
  name: string;
  addressLine1: string;
  addressLine2: string;
  city: string;
  postalCode: string;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:错误TS2345(TS)类型“地址”的参数不能分配给类型“ OperatorFunction <{},Client []>”的参数。

小智 5

1)从getClients()方法中删除管道部分

2)在订阅getClients()之前创建管道映射或创建另一个方法,该方法将仅使用从getClients()返回的可观察对象进行管道部分

mapToAddress(): Observable<Address[]> {
  this.getClients.pipe(
    map((clients: Client[]) => clients.map(client => client.address))
  )
}
Run Code Online (Sandbox Code Playgroud)

了解这一点很重要:在.pipe()中调用.map()方法时,在这种情况下您没有得到一个客户端,而是获得了整个客户端数组,并被推送到Observable。因为您映射了值,所以这些值存储在Observable中-类型为<Client []>的值。

您的管道图将在某些Observable上工作,它会发出<Client>类型的单个客户端,而不是数组。

  • 对于那些不熟悉 rxjs 库的人(比如我):使用这个 import for map `import { map } from 'rxjs/operators';` (4认同)