2016-09-27 4 views
1

저는 Angular 2를 사용 중이며 페이지에서 배열 요소를보기 전에 일부 필터링을 시도합니다.Observable 배열에 바인딩 할 수 없습니다.

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

는 지금까지 내가 말할 수있는, 이것이 ArrayObservable 개체를 반환 :이 서비스는이 호출 일부 선수의 목록을 반환합니다.

this.svc.getPlayers(this.position) 
    .subscribe(p => this.players = p); // this.players is Array<Player> 

나는 서비스에서 얻는 데이터의 형태입니다 :

{ 
    "success": true, 
    "data": [ 
    ... 
    ] 
} 

그래서 모든 단계 후, 내가 할

내가 구성 요소의 서비스를 사용하는 방법입니다 아래 오류 :

'Player 1'유형의 '[object Object]'다른 지원 개체를 찾을 수 없습니다. NgFor는 배열과 같은 Iterable에 대한 바인딩 만 지원합니다.

그럼 어떻게 될까요?

+0

왜 'Observable.from (r.data)'에 매핑하고 있습니까? – rinukkusu

+1

html 코드를 게시 할 수 있습니까? –

+0

@AlexanderCiesielski가 옳다. '.map (r => Observable.from (r.data)) '때문에 우연히'this.players'에'Observable'을 할당하고 있습니다. – martin

답변

1

Cannot find a differ supporting object '[object Object]' of type 'Player 1'. NgFor only supports binding to Iterables such as Arrays.

이 당신이 아니라 배열보다, 객체에 ngFor 당신 * 바인딩 의미합니다. HTTP 호출을 살펴보면 Array가 아니라 Array의 Observable을 반환합니다.

 .map(r => r.data) 

.map()이 라인은 이미 관찰 가능한을 반환

 .map(r => Observable.from(r.data)) 

변경, 다시 피 감시에 결과를 포장 할 필요가 없습니다.

+0

Observables는'async' 파이프를 사용하여 템플릿에 바인딩 될 수 있습니다. – Brad

+0

예.하지만 'async' 파이프의 전체적인 점은이 문제에서 그렇지 않은 observables에/subscribe 및 unsubscribeing을 생략하는 것입니다. –

관련 문제