2016-10-01 54 views
0

下面是從一個REST服務獲取數據的一個片段:不能過濾RxJS可觀察到的Angular2

getPlayers(position: string) { 
    return this.get(`players/${position}`) 
     .map(r => r.data) 
     .catch(error => { 
      console.log('Error: ', error); 
      return Observable.of<Player>(); 
     }); 
} 

r.data是玩家的數組。

這是我的定義將保持參考一下以上的回報服務的變量:

players: Observable<Player>; 

最後,這是我如何分配球員:

this.players = this.svc.getPlayers(this.position); 

這是怎麼了我列出組件上的玩家:

<ion-item *ngFor="let player of players | async"> 
    {{player.name}}-{{player.position}} 
</ion-item> 

一切按預期工作。現在,我想在向組件展示它們之前過濾這些播放器,然後嘗試類似這樣的操作;

this.players = this.svc.getPlayers(this.position).filter(p => p.position === 'hq'); 

......我在屏幕上什麼都看不到,就好像我沒有任何記錄顯示。沒有一種可觀察的方法似乎能夠正確工作。

任何想法爲什麼?

+0

能否請您確認,如果過濾的數據有數組中的任何元素? – WelsonJR

回答

0

嘗試用以下應用過濾器:

更改您的服務如下:

getPlayers(position: string) { 
    return this.get(`players/${position}`) 
     .map(r => r.json()) 
     .catch(error => { 
      console.log('Error: ', error); 
      return []; 
     }); 
} 

//在您的組件:

players: Player[]; 

//Call your service to get data and remove async pipe from HTML 
this.svc.getPlayers(this.position).subscribe(res => { 
    this.players = (res.data.length) ? res.data.filter(p => p.position === 'hq'):[]; 
}); 
+0

「玩家」是一個可觀察對象。因此,我們需要將其更改爲'array',並從視圖 – yurzui

+0

中刪除'async'管道。似乎通過單獨使用Subscribe,服務永遠不會被調用。同樣,通過從模板中刪除「異步」管道,我得到「無法找到類型爲'object'的不同支持對象'[object Object]'。NgFor僅支持綁定到數組,例如Arrays。 –

+0

將'r => r.data'更改爲'r => r.json()。data'並檢查對象錯誤是否已解決 – ranakrunal9

0
.map(r => r.data.filter(p => p.position === 'hq')) 

this.players = this.svc.getPlayers(this.position);