我希望从Firebase实时数据库中获取所有用户,并按分数属性对其进行排序.我已经使用变量工作了
用户:FirebaseListObservable< any []> ;;
但是我得到了错误:
用户:FirebaseListObservable< any []> ;;
但是我得到了错误:
Type 'Observable<any[]>' is not assignable to type 'FirebaseListObservable<any[]>'. Property '_ref' is missing in type 'Observable<any[]>'.
如果我将变量更改为
用户:Observable< any []> ;;
那么错误消失了,但是我不能使用像.push()和.update()这样的Angularfire方法.
this.users = this.af.database.list('/users') .map(items => items.sort((a,b) => b.score - a.score));
我将不胜感激任何有关如何避免错误或任何首选方式的建议,谢谢!
解决方法
FirebaseListObservable实现
lift
,因此RxJS运算符(如map)将返回FirebaseListObservable实例.
就是这样 – 当使用TypeScript时 – RxJS运算符被静态类型化以返回Observable,因此您必须强制转换为FirebaseListObservable. (使用RxJS不必涉及TypeScript,如果你看the guidance for adding operators,你会看到没有提到类型.)
您可以通过查找问题中提到的推送和更新功能来验证是否返回了FirebaseListObservable实例:
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.