0

ngx-paginationを使用しようとしていますが、いくつかの問題に直面しています。私は角度2にはかなり新しいので、観察可能な人と加入者についてあまり知らない。Rxjsを取得するhttp呼び出しで返されるデータを確認する

私は、HTTP呼び出しを行うと、データを返すサービスがあります。

getData(path: string, page: number=1) : Promise<IData[]> { 

    return this.http.get(path+'&pageNumber='+page) 
        .toPromise() 
        .then(response => { 
         return response.json() as IData[]; 
        }); 
} 

私は私のコンポーネントで、このデータを消費しています:

getDataValues(page: number) { 
    this.loading = true; 
    this.asyncData = this.getAsyncData(this.queryPath, page) 
     .do(res => { 
      this.total = res.total; 
      this.p = page; 
      this.loading = false; 
     }) 
     .map(res => res.items); 
} 

getAsyncData(path: string, page: number): Observable<any> { 
    return Observable 
    .of({ 
     items: this.repository.getData(path, page), 
     total: this.dataValues.length 
    }); 
} 

そして、私のテンプレートは次のようになりますが

<div class="list"> 
<div> 
    <article class="entity" *ngFor="let data of asyncData | async | paginate: { id: 'server', itemsPerPage: 10, currentPage: p, totalItems: total }"> 

    </article> 
</div> 
<pagination-controls (pageChange)="getDataValues($event)" id="server"></pagination-controls> 

私は解決する約束を待つ必要があるので、これは間違っていると私は知っていますが、私はそれをどうやって行うのか分かりません。 NGX-ページネーションは観察可能見込ん古い角度HTTPサービス(使用している1、新規の方がHttpClientを呼ばれている)の「getメソッドの型シグネチャを見ればそうasyncDataは、Observable

+0

観測値と約束を混合すると、制御フローが乱雑になります。通常、これは開発者がRxJSで十分に快適でない場合に発生します。あなたが本当にこれを必要とし、共通の分母(観測値)に固執しない限り、それをしないでください。 Btw、上記のコードは期待どおりに動作しません.getAsyncDataでは 'items'は値であると予想されますが、値の約束です(答えが示唆するようにtoPromiseを取り除く場合は値の観測値です)。 – estus

答えて

0

にする必要があります「応答」タイプのObservableを返すことがわかります。

get(url: string, options?: RequestOptionsArgs): Observable<Response>; 

だから、単に(.toPromiseの除去)とget呼び出しから.then方法が観察可能であなたを残します。