Ionic2 Angularfire2-如何过滤离子2中可观察到的多个FireBaselist?

Ionic2 Angularfire2-如何过滤离子2中可观察到的多个FireBaselist?,ionic2,angularfire2,Ionic2,Angularfire2,我正在使用ionic 2开发聊天应用程序,提供一些功能,如阻止、删除按摩等。。我在block函数中遇到了问题,我正在寻找一种通过使用其他列表过滤firebase列表的方法 这是我获取列表的代码 public chatList: FirebaseListObservable<any[]>; public blockList: FirebaseListObservable<any[]>; ... ... this.chatList = this.afd.list('/chat

我正在使用ionic 2开发聊天应用程序,提供一些功能,如阻止、删除按摩等。。我在block函数中遇到了问题,我正在寻找一种通过使用其他列表过滤firebase列表的方法

这是我获取列表的代码

public chatList: FirebaseListObservable<any[]>;
public blockList: FirebaseListObservable<any[]>;
...
...
this.chatList = this.afd.list('/chats/',{
   query:{
      limitToLast:50
   }
});
this.blockList = this.afd.list('/blocks/');

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

因为我们使用的是可观察的,所以它们完全可以处理这个用例

将两个可观察到的流合并,并绘制出过滤后的数据。 因此:

公共聊天列表:FirebaseListObservable;
公共阻止列表:FirebaseListObservable;
公共过滤器列表:可见;
...
...
this.chatList=this.afd.list(“/chats/”{
查询:{
限时:50
}
});
this.blockList=this.afd.list('/blocks/');
this.filteredList=可观察的.CombineTest(this.chatList,this.blockList)
.map([chats,blocked])=>{
让过滤:任何[];
…//在这里进行过滤
返回过滤;
});
HTML:



然而,最佳的解决方案可能是重新考虑Firebase数据结构(如果可能的话),这样过滤就可以在那里进行,而不是在客户端进行。但是上面的程序应该可以做到这一点。

因为我们使用的是可观察的,所以它们完全可以处理这个用例

将两个可观察到的流合并,并绘制出过滤后的数据。 因此:

公共聊天列表:FirebaseListObservable;
公共阻止列表:FirebaseListObservable;
公共过滤器列表:可见;
...
...
this.chatList=this.afd.list(“/chats/”{
查询:{
限时:50
}
});
this.blockList=this.afd.list('/blocks/');
this.filteredList=可观察的.CombineTest(this.chatList,this.blockList)
.map([chats,blocked])=>{
让过滤:任何[];
…//在这里进行过滤
返回过滤;
});
HTML:



然而,最佳的解决方案可能是重新考虑Firebase数据结构(如果可能的话),这样过滤就可以在那里进行,而不是在客户端进行。但是上面这些应该可以做到。

非常感谢你@DarkNeuron。我检查了你的代码,但我不知道为什么没有像以前那样显示数据。你能告诉我如何使用这个没有过滤器的组合列表来理解这个想法吗?因为我以前没有使用过这种方式,所以我不知道如何显示filteredListWell CombineTest的数据,它从每个可见光中获取最新的发射;因此,如果聊天列表得到更新,区块列表将包含相同的值。因此,基本上在map函数中,您可以在chats数组上执行常规过滤,就像您已经在做的那样。记住:聊天是一组聊天,而阻塞是一组阻塞。非常感谢你@DarkNeuron。我检查了你的代码,但我不知道为什么没有像以前那样显示数据。你能告诉我如何使用这个没有过滤器的组合列表来理解这个想法吗?因为我以前没有使用过这种方式,所以我不知道如何显示filteredListWell CombineTest的数据,它从每个可见光中获取最新的发射;因此,如果聊天列表得到更新,区块列表将包含相同的值。因此,基本上在map函数中,您可以在chats数组上执行常规过滤,就像您已经在做的那样。记住:chats是一组chats,blocked是一组blocked。
<div *ngFor="let chat of chatList | async" [hidden]="filter(chat)">
filter(chat):boolean{
  this.blockList.subscribe(data => {
  data.forEach(block => {
    if(block.blockFrom==this.userService.email && block.blockTo==chat.email){
      return true;
     }
   })
 })
 return false;
}
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;
  });
<div *ngFor="let chat of filteredList | async">