3

我想从 Firebase 实时数据库中获取所有用户并按分数属性对它们进行排序。我已经使用该变量使其工作,
users: FirebaseListObservable<any[]>;
但出现错误:

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

如果我将变量更改为,
users: Observable<any[]>;
那么错误就会消失,但是我不能使用 Angularfire 方法.push().update().

我的获取和排序代码(有效)如下所示:

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

对于如何避免错误或任何首选方式的任何建议,我将不胜感激,谢谢!

4

2 回答 2

11

FirebaseListObservableimplements lift,所以 RxJS 操作符——比如——map将返回一个FirebaseListObservable实例。

只是——当使用 TypeScript 时——RxJS 操作符被静态类型化为 return Observable,所以你必须强制转换为FirebaseListObservable. (使用 RxJS 不必涉及 TypeScript,如果您查看添加运算符的指南,您会发现没有提及类型。)

您可以通过查找问题中提到的和函数来验证是否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作为查询创建的实例。关于此类情况,还有一个尚未回答的问题。

于 2016-08-25T04:36:49.707 回答
2

你需要这个例子。要观看其他选项,请参阅Query界面。

this.items = angularFire.database.list('/users', {
  query: {
    orderByChild: 'childPropertyName'
  }
});

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>;
}

于 2017-04-07T01:01:17.353 回答