Angular 角度2滤波器A观察器<;对象[]>;
我想在屏幕上显示Angular 角度2滤波器A观察器<;对象[]>;,angular,rxjs,Angular,Rxjs,我想在屏幕上显示IMessage的列表,并能够使用管道对其进行过滤。 消息实际上是一个可观察的,我想通过检查其isPrivate属性来过滤每个IMessage。 MessageStatusPipe的代码如下所示: export class MessageStatusPipe { transform(message: Observable<IMessage[]>, privateFilter: bool) { //Here I want to return
IMessage
的列表,并能够使用管道对其进行过滤。
消息实际上是一个可观察的
,我想通过检查其isPrivate
属性来过滤每个IMessage
。
MessageStatusPipe
的代码如下所示:
export class MessageStatusPipe {
transform(message: Observable<IMessage[]>, privateFilter: bool) {
//Here I want to return the Messages which the pass the privateFilter, but how?
}
}
export class MessageStatusPipe {
transform(messages: Observable<IMessage[]>, privateFilter: bool) {
return messages.map(m => m.filter((message, i) => {
return message.isPrivate == privateFilter;
}));
}
}
导出类MessageStatusPipe{
转换(消息:可观察,私有过滤器:bool){
//在这里,我想返回通过privateFilter的消息,但是如何返回呢?
}
}
我读过一些问题,这些问题看起来非常相似,但我似乎无法应用这个解决方案。
以下由卢卡·雅各布维茨提出的解决方案似乎正是我所需要的。
===============使用答案更新=============
return messages.filter(privateFilter);
正如Meir指出的,管道返回一个bool值,而不是包含与过滤器匹配的项的子数组。我的工作管道现在看起来像这样:
export class MessageStatusPipe {
transform(message: Observable<IMessage[]>, privateFilter: bool) {
//Here I want to return the Messages which the pass the privateFilter, but how?
}
}
export class MessageStatusPipe {
transform(messages: Observable<IMessage[]>, privateFilter: bool) {
return messages.map(m => m.filter((message, i) => {
return message.isPrivate == privateFilter;
}));
}
}
导出类MessageStatusPipe{
转换(消息:可观察,私有过滤器:bool){
返回messages.map(m=>m.filter((message,i)=>{
return message.isPrivate==privateFilter;
}));
}
}
您的操作可以(应该)分为两部分:
1.获取异步值
2.过滤它们
因此,您可以将管道的签名更改为:
transform(messages: IMessage[], privateFilter: bool) { ... }
在您的组件中,请执行以下操作:
<div *ngFor="let msg of messages | async | messageStatusPipe">...</div>
…
这实际上就是我的组件中已经有的东西<代码>转换(messages:IMessage[],privateFilter:bool){…}
这是我的管道过去的样子,但它给出了一个可观察的
,我无法应用过滤器。你的管道不应该返回bool,它应该返回与你的条件匹配的子数组。你是对的,我用一个有效的解决方案更新了我的答案。