我创建了一个服务,可以获取数据库的所有元素:
服务
getElements() {
return (this.eleList= this.firebase.list("elements"));
}
组件
eleList: Element[];
getBets() {
return this.databaseService
.getElements()
.snapshotChanges()
.subscribe(item => {
this.eleList= [];
item.forEach(element => {
let x = element.payload.toJSON();
x["$key"] = element.key;
this.eleList.push(x as Element);
});
});
}
使用这两种方法,我要做的是将所有元素存储在this.eleList
中。
我想创建一个名为filterByName(name)
的新方法,在该方法中,我将this.eleList
更新为一个仅包含对象中包含name
的数组的数组,例如, this.eleList[1].name
我不知道Firebase是否提供缩短它的方法,或者我需要使用Javascript / Typescript。
答案 0 :(得分:1)
Firebase充分利用了observables和async管道。
您应该利用它:
eleList$ = new Subject();
getElements() {
this.this.firebase.list("elements")
.pipe(take(1))
.subscribe(list => this.eleList$.next(list));
}
getBets() {
this.databaseService
.getElements()
.snapshotChanges()
.pipe(
map(item => items.map(element => ({
...element.payload.toJSON(),
'$key': element.key
})))
)
.subscribe(elements => this.eleList$.next(list));
}
现在要排序列表:
sortedList$ = this.eleList$.pipe(
map(elements => elements.filter(element => !!element.name))
);