3

모든 사용자를 Firebase 실시간 데이터베이스에서 가져 와서 score 속성으로 정렬하고 싶습니다. '그때 오류가 사라
users: Observable<any[]>;
에 변수를 변경하면FirebaseListObservable 목록을 Angularfire2 Angular2로 정렬하려면 어떻게해야합니까?

Type 'Observable<any[]>' is not assignable to type 'FirebaseListObservable<any[]>'. 
Property '_ref' is missing in type 'Observable<any[]>'. 

,하지만 내가 할 수있는 :이 변수
users: FirebaseListObservable<any[]>;
를 사용하여 작업 할 수있어하지만 오류를 얻을 Angularfire 방법을 .push().update()과 같이 사용하십시오. 같은 (일)

내 인출 및 정렬 코드를 찾습니다 : 나는 오류, 또는 선호하는 방법을 피하기 위해이 작업을 수행해야한다 방법에 대한 조언을 부탁드립니다

this.users = this.af.database.list('/users') 
    .map(items => items.sort((a, b) => b.score - a.score)); 

, 감사합니다!

답변

10

FirebaseListObservablelift을 구현하므로 map과 같은 RxJS 연산자는 FirebaseListObservable 인스턴스를 반환합니다.

TypeScript를 사용할 때 RxJS 연산자는 Observable을 반환하기 위해 정적으로 입력되므로 FirebaseListObservable으로 캐스트해야합니다. (RxJS를 사용하면 타이프를 포함 할 필요가 없습니다 당신이 the guidance for adding operators를 보면 당신은 유형이 언급되지 않은 것을 볼 수 있습니다.)

당신은 FirebaseListObservable 인스턴스가 당신이 언급 한 pushupdate 기능을 찾고에 의해 반환되는 것을 확인 할 수 있습니다 질문 :

this.users = this.af.database 
    .list('/users') 
    .map(items => items.sort((a, b) => b.score - a.score)) as FirebaseListObservable<any[]>; 
console.log(this.users.push.toString()); 
console.log(this.users.update.toString()); 

단,이 쿼리로 만들어집니다 FirebaseListObservable 인스턴스에 대해 작동하지 않습니다. 그러한 인스턴스에 대해서는 as-yet-unanswered question이 있습니다.

+0

this.items = angularFire.database.list('/users', { query: { orderByChild: 'childPropertyName' } });
는 - 대단히 감사합니다 :) –

+1

@LindsayWard이는 클라이언트 측에서 수행된다. 대용량 데이터 세트의 경우 서버 측에서 정렬 할 수 있습니다. Angularfire2는 정렬 기준으로'list()'의 두 번째 매개 변수를 지원합니다. – Sam

+0

감사합니다. @ 샘. 알아 둘만한. 나는 그 점을 또한 시험해보고 어떤 차이가 있는지 알아 보겠습니다. –

2

이 예가 필요합니다. 다른 옵션을 보려면 Query 인터페이스를 참조하십시오.

큰, 그리고 작동

export interface Query { 
 
    [key: string]: any; 
 
    orderByKey?: boolean | Observable<boolean>; 
 
    orderByPriority?: boolean | Observable<boolean>; 
 
    orderByChild?: string | Observable<string>; 
 
    orderByValue?: boolean | Observable<boolean>; 
 
    equalTo?: any | Observable<any>; 
 
    startAt?: any | Observable<any>; 
 
    endAt?: any | Observable<any>; 
 
    limitToFirst?: number | Observable<number>; 
 
    limitToLast?: number | Observable<number>; 
 
}