better done than better said

困ったときに調べた結果

ionic4 githubUsersの一覧をinfiniteScrollで表示する

前回のgithubUsers一覧を編集して無限スクロールでユーザ表示を行う。

f:id:sjisjis:20190224215808g:plain

前回作った一覧ページgithub page(ts, html)を修正

# github.page.ts
import { Component, OnInit } from '@angular/core';
import { GithubService } from '../github.service';

@Component({
  selector: 'app-github',
  templateUrl: './github.page.html',
  styleUrls: ['./github.page.scss'],
})
export class GithubPage implements OnInit {
  users:any = [];
+  next: number = 0;

  constructor(
    private githubService: GithubService
  ) {
    this.getUserList();
  }

  ngOnInit() {
  }

+  doInfinite(infiniteScrollEvent) {
+    this.getUserList();
+    infiniteScrollEvent.target.complete();
+  }

  getUserList() {
-    this.githubService.getUsers().subscribe(data => {
-    this.users = data;
+    this.githubService.getUsers(this.next).subscribe(data => {
+      if(this.next === 0) {
+        this.users = data;
+      } else {
+        Object.values(data).map(_ => this.users.push(_));
+      }
+      this.next = Object.values(data).slice(-1)[0].id;
    },err => {
      console.log(err);
    });
  }
}

# github.page.html
<ion-header>
  <ion-toolbar>
    <ion-title>github</ion-title>
  </ion-toolbar>
</ion-header>

<ion-content padding>
  <ion-list>
    <ion-item *ngFor="let user of users">
      <ion-avatar item-start>
        <ion-img [src]="user.avatar_url"></ion-img>
      </ion-avatar>
      {{ user.id }} {{ user.login }}
    </ion-item>
  </ion-list>
</ion-content>
+ <ion-infinite-scroll (ionInfinite)="doInfinite($event)">
+    <ion-infinite-scroll-content></ion-infinite-scroll-content>
+  </ion-infinite-scroll>

上記の変更により無限スクロールを実現できる。
時間がなかったのでとりあえず動くものをコミットしたけど次回はもう少しangularらしいコードに修正してみます。

今回のコードはこちら