javascript - Angular 4 Firebase 操作 Observable 的 *ngFor 或在 Observable 中使用索引

标签 javascript angular typescript firebase angularfire

我正在使用 Angular 4 和 Firebase 数据库。在我的应用中,我想在浏览器上显示前十名用户的排行榜。 我在我的 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 个用户。但是我希望结果像这个例子一样显示:

<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>

其中未知的将替换为可观察到的 topusers 的正确索引。 我想要的是将 *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];
    }
}

这是一个工作plunkr:https://plnkr.co/edit/trvaibgJb9v2IKreN3uY?p=preview

这是一篇演示 ngFor 索引变量的文章:https://coryrylan.com/blog/angular-ng-for-syntax

关于javascript - Angular 4 Firebase 操作 Observable 的 *ngFor 或在 Observable 中使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679486/

相关文章:

angularjs-directive - Angular2 n - 获取无效参数 [object Object] ... 对于管道 'AsyncPipe'

angular - 属性类型 'responseType' 不兼容

html - 如果在 Angular 中将 sourcemap 设置为 false 会发生什么

javascript - RabbitMQ 管理插件窗口呈现为空白页

javascript - jquery 和 javascript 不工作

javascript - 自定义扩展 dijit/_TemplatedMixin 抛出 "Invalid template Error"

javascript - 如何在 Angular 6 中捕获第三方库中的数据?

javascript - 为什么 wp_enqueue_style 在这里不起作用?

css - 如何从底部强制 Angular Material 2 sidenav 内容

javascript - 在 Angular2 中使用 Parse 作为模块