Rxjs 过滤器运算符不适用于 Angular2 Observable

Posted

技术标签:

【中文标题】Rxjs 过滤器运算符不适用于 Angular2 Observable【英文标题】:Rxjs filter operator not working with Angular2 Observable 【发布时间】:2016-12-02 00:24:25 【问题描述】:

在这个plunker 我正在尝试在类 member.service.ts 中的 angular2 observable (Rxjs) 上使用过滤器运算符。 observable 是通过 http 请求获取的,我处理如下:

  getMembers (): Observable<Member[]> 
    var one = this.http.get(this.memberUrl)
    .map( this.extractData )
    //.filter(x => x.type==='member')
   return one
 

我的问题是:为什么当我取消注释带有过滤器的行时列表不会呈现(请查看 in-memory-data.service.ts)?在我看来,可观察对象在映射运算符之后处于对象状态,并且没有类型属性。不过不确定!

【问题讨论】:

【参考方案1】:

你的 observable 是一个单一的项目,它是一个数组。它不是该数组中项目的可观察值。 x 在您的过滤器函数中:x=&gt; x.type ==="member" 是一个数组,所以 x.type 不存在。为了完成你想要的,你需要遍历那个数组:

getMembers (): Observable<Member[]> 
    var one = this.http.get(this.memberUrl)
                    .map( this.extractData )
                    .map(memberArray => 
                        return memberArray.filter(x=> x.type === "member")
                    )
    return one
  

【讨论】:

以上是关于Rxjs 过滤器运算符不适用于 Angular2 Observable的主要内容,如果未能解决你的问题,请参考以下文章

angular2 学习笔记 ( rxjs 流 )

dplyr 取消引用不适用于过滤器功能

Angular/Rxjs 管道异步不适用于 s-s-r?

rxjs 与 systemjs 捆绑用于 Angular 2.0 应用程序

Observable .do() 运算符 (rxjs) 的用例

RXJS Observable 数组上的简单过滤器