我想在屏幕上显示IMessage
的列表,并能够使用Pipe
过滤它们。
该消息实际上是Observable<IMessage[]>
,我想通过检查其IMessage
属性来过滤每个isPrivate
。
MessageStatusPipe
的代码如下所示:
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;
}));
}
}
答案 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>