Angular 4 Firebase 操纵 Observable 的 *ngFor 或在 Observable 中使用索引
Angular 4 Firebase manipulate *ngFor of Observable or use index in an Observable
我正在使用 Angular 4 和 Firebase database.In 我的应用程序 我想在浏览器上显示前十名用户的排行榜。
我在 component.ts
上使用此代码
export class HomefillerComponent implements OnInit {
topusers: Observable<any>;
constructor(db: AngularFireDatabase,public authService: AuthService) {
this.topusers = db.list('users', {
query: {
orderByChild: "totalscore",
limitToLast: 10,
}
}).map((topusers) => {console.log(topusers);
return topusers.reverse();})
}
和 html 代码:
<a class="btn btn-download nav-item vlink dropdown-toggle pointer " data-toggle="dropdown">Leaderboard</a>
<ul class="dropdown-menu text-center list">
<ul *ngFor="let topuser of topusers | async">
<li> {{ topuser.username | json }}:{{ topuser.totalscore | json }} </li>
</ul>
</ul>
</div>
一切正常,我得到了前 10 个users.However我希望结果像这个例子一样显示:
<ul>
<li><span>First:</span><span>Unknow</span></li>
<li><span >Second:</span><span>Unknow</span></li>
<li><span >Third:</span><span >Unknow</span></li>
<li><span >Fourth:</span><span>Unknow</span></li>
<li><span >Fifth</span><span>Unknow</span></li>
...etc...
</ul>
where unknown 将替换为 topusers observable 的正确索引。
我想要的是将 *ngFor="let topuser of topusers | async"
控制为 10 个 topusers,这样我就可以将 First、Second 等放在他们身上。我搜索了几乎所有地方,但找不到任何关于如何在 html 代码的 Observable 上使用特定索引的帮助。
可以使用ngFor指令的索引变量
<div *ngFor="let item of observable$ | async; let i = index">
<li> {{i + 1 | ordinalString}} {{ topuser.username | json }}:{{ topuser.totalscore | json }} </li>
</div>
然后运行通过管道索引得到需要的字符串。
@Pipe({name: 'ordinalString'})
export class OrdinalStringPipe implements PipeTransform {
// super simple ordinal string method
transform(index: number): string{
let ordinalStrings = ['Zero', 'First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth'];
return ordinalStrings[index];
}
}
这是一个有效的插件:https://plnkr.co/edit/trvaibgJb9v2IKreN3uY?p=preview
这是一篇演示 ngFor 索引变量的文章:https://coryrylan.com/blog/angular-ng-for-syntax
我正在使用 Angular 4 和 Firebase database.In 我的应用程序 我想在浏览器上显示前十名用户的排行榜。 我在 component.ts
上使用此代码export class HomefillerComponent implements OnInit {
topusers: Observable<any>;
constructor(db: AngularFireDatabase,public authService: AuthService) {
this.topusers = db.list('users', {
query: {
orderByChild: "totalscore",
limitToLast: 10,
}
}).map((topusers) => {console.log(topusers);
return topusers.reverse();})
}
和 html 代码:
<a class="btn btn-download nav-item vlink dropdown-toggle pointer " data-toggle="dropdown">Leaderboard</a>
<ul class="dropdown-menu text-center list">
<ul *ngFor="let topuser of topusers | async">
<li> {{ topuser.username | json }}:{{ topuser.totalscore | json }} </li>
</ul>
</ul>
</div>
一切正常,我得到了前 10 个users.However我希望结果像这个例子一样显示:
<ul>
<li><span>First:</span><span>Unknow</span></li>
<li><span >Second:</span><span>Unknow</span></li>
<li><span >Third:</span><span >Unknow</span></li>
<li><span >Fourth:</span><span>Unknow</span></li>
<li><span >Fifth</span><span>Unknow</span></li>
...etc...
</ul>
where unknown 将替换为 topusers observable 的正确索引。
我想要的是将 *ngFor="let topuser of topusers | async"
控制为 10 个 topusers,这样我就可以将 First、Second 等放在他们身上。我搜索了几乎所有地方,但找不到任何关于如何在 html 代码的 Observable 上使用特定索引的帮助。
可以使用ngFor指令的索引变量
<div *ngFor="let item of observable$ | async; let i = index">
<li> {{i + 1 | ordinalString}} {{ topuser.username | json }}:{{ topuser.totalscore | json }} </li>
</div>
然后运行通过管道索引得到需要的字符串。
@Pipe({name: 'ordinalString'})
export class OrdinalStringPipe implements PipeTransform {
// super simple ordinal string method
transform(index: number): string{
let ordinalStrings = ['Zero', 'First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth'];
return ordinalStrings[index];
}
}
这是一个有效的插件:https://plnkr.co/edit/trvaibgJb9v2IKreN3uY?p=preview
这是一篇演示 ngFor 索引变量的文章:https://coryrylan.com/blog/angular-ng-for-syntax