Angularfire2 - 如何在 Ionic 2 中过滤多个 FirebaseListObservable?

Angularfire2 - How to filter multiple FirebaseListObservable in Ionic 2?

我正在使用 ionic 2 开发提供一些功能的聊天应用程序,例如阻止、删除消息等。我在阻止功能方面遇到问题,我正在寻找一种使用其他列表来过滤 firebase 列表的方法

这是我获取列表的代码

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;
}

还有其他方法可以解决我的问题吗?

由于我们正在使用 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 数据结构(如果可能),以便可以在此处而不是在客户端中进行过滤。但是上面应该可以做到。