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

时间:2017-07-24 03:15:02

标签: ionic2 angularfire2

我正在使用离子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;
}

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

1 个答案:

答案 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数据结构(如果可能),因此可以在那里而不是在客户端进行过滤。但上面应该这样做。