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,它应该返回与你的条件匹配的子数组。你是对的,我用一个有效的解决方案更新了我的答案。