3

我有一个可观察的对象列表,我试图对其进行迭代以将列表对象属性与局部变量进行比较。

我可以在模板中循环列表中的对象,但看不到如何在组件逻辑中。

如何在模板之外执行此操作?

这是迄今为止我最接近工作迭代器的地方。

constructor(af: AngularFire) {
    this.competitors = af.database.list('/competitors');
}
this.competitors.forEach(competitor) {
    console.log(competitor);
}

很抱歉,如果这是一个结构不佳的问题,我对 Angular2 和 Firebase 还是很陌生。

4

3 回答 3

7

你在这里使用 Observables 而不是普通的集合。这意味着您必须使用 Observable 原语并且简单的循环this.competitors将不起作用。

这个:

this.competitors.subscribe(competitor => console.log(competitor));

顺便说一句,命名 Observables 有一个命名约定,以 $ 结尾,所以它看起来像下面这样:

this.competitors$ = af.database.list('/competitors');

和:

this.competitors$.subscribe(competitor => console.log(competitor));

这将记录整个竞争对手。如果要遍历元素,请执行以下操作:

this.competitors.subscribe(
    competitors => {
        competitors.map(competitor =>
            console.log(competitor)
        )
    });
于 2017-02-10T11:36:54.723 回答
0
this.competitors.forEach(competitor) {
    var competitorValue = competitor.val();
    console.log(competitorValue);
    competitorValue.forEach(sub){
        console.log(sub.val());
  }
}

这将让您解析所有分支。

于 2016-07-25T05:15:29.613 回答
0

next在订阅中迭代:

this.transactions.subscribe({
  next(competitors) {
    competitors.forEach(competitor => {
         console.log(competitor);
    });
  },
  error(err) { console.log('errors already caught... will not run'); }
})
于 2018-11-16T07:36:10.790 回答