【ionic2】無限スクロールの使い方

なかなか手をだせにずにいたionic2を次の案件では使えるように準備中。とりあえずionic1でできてたことをionic2でもできるようになることが当面の目標。今回はapiから取得したjsonからリスト表示で、無限スクロールを実装してみる。

blankでプロジェクト作成

$ ionic start test blank

まずはhttpをつかえるように。

app/app.module.ts

import { BrowserModule } from '@angular/platform-browser';

・・・

import { HttpModule } from '@angular/http'; ## ★ これを追加

@NgModule({

    ・・・ 

    imports: [
        BrowserModule,
        IonicModule.forRoot(MyApp),
        HttpModule ## ★ これを追加
    ],

    ・・・ 

})
export class AppModule {}

つづいてコントローラ?を実装

src/pages/home/home.ts

import { Component } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
c})
export class HomePage {

  page = 1;
  items = [];
  completed = false;

  constructor(public http: Http) {
    this.getUsers().subscribe(data => {
      if (0 < data.users.length) {
        this.items = this.items.concat(data.users);
        this.page++;
      } else {
        this.completed = true;
      }
    });
  }

  doInfinite(infiniteScroll) {
    this.getUsers().subscribe(data => {
      if (0 < data.users.length) {
        this.items = this.items.concat(data.users);
        this.page++;
      } else {
        this.completed = true;
      }
      infiniteScroll.complete();
    });
  }

  getUsers() {
    return this.http
      .get('http://localhost:3000/users?page=' + this.page)
      .map(res => res.json());
  }

}

さいごにテンプレートを実装

src/pages/home/home.html

・・・

<ion-content padding>
  <ion-list>
    <ion-item *ngFor="let item of items">
      {{ item.name }}
    </ion-item>
  </ion-list>
  <ion-infinite-scroll (ionInfinite)="doInfinite($event)" *ngIf="completed">
    <ion-infinite-scroll-content></ion-infinite-scroll-content>
  </ion-infinite-scroll>
</ion-content>

typescriptとかrxjsとかまだ全然わかってないけどとりあえずこれでできた。以上です。