如何在Angular 2的异步管道中使用rxjs过滤器

时间:2018-02-02 11:40:25

标签: angular rxjs

我有一个Observable我试图过滤,但我似乎无法在我看来正确显示它。

comments = new Rx.BehaviorSubject([
    {body: 'foo', commentable_type: 'Client'},
    {body: 'foo', commentable_type: 'Client'},
    {body: 'foo', commentable_type: 'Purchase'},
    {body: 'foo', commentable_type: 'Client'},
    {body: 'foo', commentable_type: 'Payment'},
]);

comments$ = comments.asObservable();

clientCommentStream$ = this.comments$.filter(comment => comment['commentable_type'] === 'Client');

在我看来,这很有效:

<li *ngFor="let comment of comments$ | async">
    {{ comment.body }}, {{ comment.commentable_type }}
</li>

但这没有显示任何内容:

<li *ngFor="let comment of clientCommentStream$ | async">
    {{ comment.body }}, {{ comment.commentable_type }}
</li>

我的stack blitz显示过滤正在运行,但它不会显示,因为似乎对象的结构已更改。任何见解都会有所帮助。

1 个答案:

答案 0 :(得分:2)

你缺少退货声明

clientCommentStream$ = this.comments$.filter(function(comment) {
    return comment.commentable_type == 'Client'; <-- missing "return"
})

或使用箭头功能

clientCommentStream$ = this.comments$
                       .filter(comment => comment.commentable_type == 'Client')

修改 使用Rx.Observable.from代替Rx.BehaviorSubject

来自docs BehaviorSubject发出最新项目,不确定它是如何工作的