0

我有两个系列:“车辆”和“客户”。在每辆车中,我都通过客户的文档 ID 注册客户。我需要使用存储在车辆文档中的密钥访问客户的标题,并将其显示在显示车辆列表的材料数据表中。但是,我似乎无法让它工作,我对此感到非常困惑。

下图显示了我需要使用另一个文档显示客户端标题的表格。其余值是从车辆自己的文档中提取的。

在此处输入图像描述

到目前为止,我对 switchMap 和 flatMap 的尝试都不成功(可能是由于缺乏使用这些运算符的经验)。唯一成功的尝试是通过嵌套的 observable 查询从 "vehicles" observable 获取客户端标题,但它的表现非常糟糕。(排序表格后客户标题消失)

这就是我获取可观察车辆的方式:

    this.vehicles$ = this.afs.collection<IVehicle>(`vehicles`);
    this.vehicles = this.vehicles$.snapshotChanges().pipe(
  map(actions => {
    return actions.map(a => {
      const data = a.payload.doc.data() as IVehicle;
      const $key = a.payload.doc.id;
      return { $key, ...data };
    });
  })
);

这就是我能够获取标题的方式(排序表事件中的故障 - 标题由于某种原因消失了)

    this.vehicles = this.vehicles$.snapshotChanges().pipe(
  map(actions => {
    return actions.map(a => {
      const data = a.payload.doc.data() as IVehicle;
      const $key = a.payload.doc.id;
      const client = data.client;
      const clientTitle = this.afs
        .doc(`clients/${client}`)
        .snapshotChanges()
        .pipe(
          map(foo => {
            const dataFoo = foo.payload.data() as IClient;
            let titleString = dataFoo.title;
            if (client) {
              return { titleString, ...dataFoo };
            } else {
              titleString = 'N/A';
              return { titleString, ...dataFoo };
            }
          })
        );
      return { clientTitle, $key, ...data };
    });
  })
);

我在尝试使用 switchMap 时一定做错了,因为我似乎无法从车辆文档中获取文档 ID,即使车辆接口包含“客户端”字段。(见下图)这就是为什么我没有完成那个片段来返回粒度值以附加到“车辆”可观察对象上。

在此处输入图像描述

我似乎无法理解我做错了什么,我将不胜感激任何显示处理这些类型查询的“正确”方法的方向。

4

0 回答 0