如何在Angularfire2 Angular2中对FirebaseListObservable列表进行排序?

Lin*_*ard 3 firebase typescript firebase-realtime-database angularfire2 angular

我希望从Firebase实时数据库中获取所有用户,并按分数属性对其进行排序.我已经使用变量工作,
users: FirebaseListObservable<any[]>;
但我得到错误:

Type 'Observable<any[]>' is not assignable to type 'FirebaseListObservable<any[]>'.
Property '_ref' is missing in type 'Observable<any[]>'.
Run Code Online (Sandbox Code Playgroud)

如果我将变量更改为
users: Observable<any[]>;
然后错误消失,但我不能使用像.push()和的Angularfire方法.update().

我的提取和排序代码(有效)看起来像:

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

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

car*_*ant 11

这些FirebaseListObservable工具lift,所以像RxJS操作符一样map- 将返回一个FirebaseListObservable实例.

就是这样 - 当使用TypeScript时 - RxJS运算符被静态类型化返回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());
Run Code Online (Sandbox Code Playgroud)

但请注意,这不适用于FirebaseListObservable作为查询创建的实例.关于此类情况,还有一个尚未解答的问题.

  • 我收到以下错误:`[ts]属性'map'在类型'FirebaseListObservable <any []>'上不存在."有什么想法吗?我正在使用:`"angularfire2":"^ 2.0.0-beta.7-pre","和""firebase":"^ 3.6.4","更多细节:http://stackoverflow.com/questions/ 41550132 /属性-过滤并 - 不存在上型firebaselistobservable (2认同)