如何在 Angularfire2 Angular2 中对 FirebaseListObservable 列表进行排序?
How can I sort a FirebaseListObservable list in Angularfire2 Angular2?
我想从 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[]>;
然后错误消失了,但是我不能使用像 .push()
和 .update()
.
这样的 Angularfire 方法
我的抓取和排序代码(有效)如下所示:
this.users = this.af.database.list('/users')
.map(items => items.sort((a, b) => b.score - a.score));
对于如何避免错误或任何首选方式的任何建议,我将不胜感激!
FirebaseListObservable
实现了 lift
,因此 RxJS 运算符 - 如 map
- 将 return 一个 FirebaseListObservable
实例。
只是 - 当使用 TypeScript 时 - RxJS 运算符被静态类型化为 return Observable
,所以你必须转换为 FirebaseListObservable
。 (使用 RxJS 不必涉及 TypeScript,如果你查看 the guidance for adding operators 你会发现没有提到类型。)
您可以通过查找您在问题中提到的 push
和 update
函数来验证 FirebaseListObservable
实例是否被 return 编辑:
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。
你需要这个例子。要观看其他选项,请参阅 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>;
}
我想从 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[]>;
然后错误消失了,但是我不能使用像 .push()
和 .update()
.
我的抓取和排序代码(有效)如下所示:
this.users = this.af.database.list('/users')
.map(items => items.sort((a, b) => b.score - a.score));
对于如何避免错误或任何首选方式的任何建议,我将不胜感激!
FirebaseListObservable
实现了 lift
,因此 RxJS 运算符 - 如 map
- 将 return 一个 FirebaseListObservable
实例。
只是 - 当使用 TypeScript 时 - RxJS 运算符被静态类型化为 return Observable
,所以你必须转换为 FirebaseListObservable
。 (使用 RxJS 不必涉及 TypeScript,如果你查看 the guidance for adding operators 你会发现没有提到类型。)
您可以通过查找您在问题中提到的 push
和 update
函数来验证 FirebaseListObservable
实例是否被 return 编辑:
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。
你需要这个例子。要观看其他选项,请参阅 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>;
}