Angular 2过滤Observabble <object []>

时间:2017-07-26 08:49:56

标签: angular rxjs

我想在屏幕上显示IMessage的列表,并能够使用Pipe过滤它们。 该消息实际上是Observable<IMessage[]>,我想通过检查其IMessage属性来过滤每个isPrivateMessageStatusPipe的代码如下所示:

export class MessageStatusPipe {
    transform(message: Observable<IMessage[]>, privateFilter: bool) {


        //Here I want to return the Messages which the pass the privateFilter, but how?

    }
}

我已经阅读了一些看似非常相似的问题,但我似乎无法应用该解决方案。 Luka Jacobowitz的以下解决方案似乎正是我所需要的。 https://stackoverflow.com/questions/37991713/simple-filter-on-array-of-rxjs-observable#=

============更新回答=============

正如Meir所指出的那样,管道返回了一个bool值,而不是包含与过滤器匹配的项的子数组。我的工作管现在看起来像这样:

export class MessageStatusPipe {
    transform(messages: Observable<IMessage[]>, privateFilter: bool) {
        return messages.map(m => m.filter((message, i) => {
            return message.isPrivate == privateFilter;
        }));
    }
}

1 个答案:

答案 0 :(得分:0)

您的行动可以(应该)分为两部分: 1.获取异步值 2.过滤它们

因此,您可以将管道的签名更改为:

<div *ngFor="let msg of messages | async | messageStatusPipe">...</div>

在您的组件中执行:

return messages.filter(privateFilter);

如果由于某种原因你想将它们组合成一个管道,你可以看一下article I wrote,它显示如何处理管道内的异步值并使其适应你的需要(主要是,添加你的过滤登录电子)

============添加过滤逻辑==============

<FilesMatch "\.(xml|txt|css|js)$">
    Header set Cache-Control "max-age=7200, proxy-revalidate"
</FilesMatch>