【问题标题】:Angularfire2 - How to filter multiple FirebaseListObservable in Ionic 2?Angularfire2 - 如何在 Ionic 2 中过滤多个 FirebaseListObservable?
【发布时间】:2017-07-24 23:27:56
【问题描述】:

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

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

【问题讨论】:

    标签: ionic2 angularfire2


    【解决方案1】:

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

    【讨论】:

    • 谢谢你 v.much @DarkNeuron。我检查了你的代码,但我不知道为什么没有像以前那样显示数据。你能告诉我如何使用这个没有过滤器的组合列表来理解这个想法吗?因为之前没用过这种方式所以不知道怎么显示filteredList的数据
    • 好吧 combineLatest 从每个 Observable 获取最新的发射;因此,如果 chatList 得到更新,blockList 将包含相同的值。所以基本上在 map 函数中,你可以对 chats 数组进行正常的过滤,就像你已经在做的那样。记住:chats 是一个聊天数组,blocked 是一个被屏蔽数组。
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2017-05-14
    • 2016-09-08
    • 2018-04-03
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多