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