我正在使用离子2开发聊天应用程序,提供一些功能,如阻止,删除按摩等。我的块功能问题,我正在寻找一种方法来使用其他列表筛选火力列表
这里是我获取列表的代码
public chatList: FirebaseListObservable<any[]>;
public blockList: FirebaseListObservable<any[]>;
...
...
this.chatList = this.afd.list('/chats/',{
query:{
limitToLast:50
}
});
this.blockList = this.afd.list('/blocks/');
这是这些列表的树的图片 tree of chats and blocks
我尝试使用这种方式过滤我的列表,但它不起作用
HTML
<div *ngFor="let chat of chatList | async" [hidden]="filter(chat)">
TS
filter(chat):boolean{
this.blockList.subscribe(data => {
data.forEach(block => {
if(block.blockFrom==this.userService.email && block.blockTo==chat.email){
return true;
}
})
})
return false;
}
还有其他方法可以解决我的问题吗?
答案 0 :(得分:0)
由于我们正在使用Observables,因此他们不仅能够处理这个用例。
合并两个Observable流,并映射出过滤后的数据。 就这样:
public chatList: FirebaseListObservable<any[]>;
public blockList: FirebaseListObservable<any[]>;
public filteredList: Observable<any[]>;
...
...
this.chatList = this.afd.list('/chats/',{
query:{
limitToLast:50
}
});
this.blockList = this.afd.list('/blocks/');
this.filteredList = Observable.combineLatest(this.chatList, this.blockList)
.map(([chats, blocked]) => {
let filtered: any[];
... // Do filtering here
return filtered;
});
HTML:
<div *ngFor="let chat of filteredList | async">
然而,最佳解决方案可能是重新考虑您的Firebase数据结构(如果可能),因此可以在那里而不是在客户端进行过滤。但上面应该这样做。