【问题标题】:RxJS/Angular: How to zip observable arrays of objectsRxJS/Angular:如何压缩可观察的对象数组
【发布时间】:2017-02-20 19:10:24
【问题描述】:

我正在使用 ionic 2 和 angular 2。现在我有两个包含对象数组的可观察对象,并且正在传递给我的模板以进行显示:

users: Observable<User[]>; scores: Observable<Score[]>;

在我的模板中,我目前必须单独显示它们:

<ion-card *ngFor="let score of scores | async" >
  <ion-item text-wrap>{{ score.total }} </ion-item>
</ion-card>

<ion-card *ngFor="let user of users | async" (click)="goToPlayer(user, league)">
<ion-item text-wrap>{{ user.id }}</ion-item>
</ion-card>

但是,我希望能够在同一行同时显示这些值,user.id 和 score.total。目前它显示所有分数,然后显示所有用户 ID。 Observable 数组总是包含相同数量的项目。

用户和分数的模型是:

export interface User {
id?: string,
email?: string,
leagues?: any[],
dateCreated: Date
};

export interface Score {
scores: any[],
total: number
};

使用 Aravind 回答中的示例邮政编码:

this.users = this.userData.loadUsers(this.league.id);
this.scores = this.leagueData.loadPlaylistScores(this.league.id);

Observable
.zip(this.users,
     this.scores,
     (id: number, total: number) => ({ id, total }))
.subscribe(x => console.log(x));

将三个对象打印到控制台,这是正确数量的对象。但是每个都是 Object {id: Array[0], total: Array[0]}

【问题讨论】:

  • 使用相关示例 json 和可观察代码更新您的帖子
  • 听起来更像是 zip 使用方式的问题,因为 zip 是为这种情况而设计的。
  • @Namirna zip 用于 Observable 内的属性,因此 OP 正在寻找这种格式 { id : 1, score : 200 } 以这种格式提取 json 响应必须相应地映射属性。看看我下面的答案
  • @Aravind 好吧,就像你回答的那样,我在想 RxJS 中的 zip,而不是 JS 中数组的“正常” zip,但是阅读我看到我错过了在我的评论中提到这一点。
  • @Namirna ,没关系。所有人都在学习。 :)

标签: angular ionic2 rxjs


【解决方案1】:

猜猜下面的代码对你有帮助

Observable
    .zip(users
         scores,
         (id: number, total: number) => ({ id, total }))
    .subscribe(x => console.log(x));

注意:如果这不起作用,则需要您的示例 json 来查找特定属性。我可以据此更新

【讨论】:

  • 这将返回错误:无法读取未定义的属性'Symbol(Symbol.iterator)'。我用模型更新了问题。
  • 数据是从 Firebase 数据库中提取的,然后通过一系列函数映射到这些模型,所以我不确定如何向您展示 json。我发现了产生 'Symbol(Symbol.iterator) 错误的错误,因为我偶尔会在 Observables 被填充之前传递它们。现在上面的代码产生了一个 Observable 这不是可迭代的并产生错误:“找不到类型为 'object' 的不同支持对象 '[object Object]'。NgFor 仅支持绑定到 Iterables,例如数组。”尝试在模板中显示时。
  • 更新您用来压缩的代码,并以我的答案作为参考。另外,您从哪里获得用户、分数?
  • 我用您的答案更新了问题。我从从 firebase 提取数据然后将数据映射到模型的函数中获取用户和分数。我认为这里复制太多了。用户和分数都自己正确显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 2018-10-25
  • 2018-11-23
  • 1970-01-01
  • 2022-11-09
相关资源
最近更新 更多