【问题标题】:How to implement an Observable as a subset collection of a BehaviorSubject collection如何将 Observable 实现为 BehaviorSubject 集合的子集
【发布时间】:2017-05-17 09:01:19
【问题描述】:

我有一个 BehaviorSubject 图片(因为在某些情况下我需要 .getValue() )和一个 Observable 表示标记为收藏的图片,它是图片的子集。我的代码有效,这里是:

public pictures: BehaviorSubject<Array<Picture>>;
public favoritesPictures: Observable<Array<Picture>>;

constructor(private http: Http) { 
    this.pictures = new BehaviorSubject([]);
    this.favoritesPictures = Observable.create((observer) => {
        this.pictures.subscribe((pictures) => {
            observer.next(pictures.filter((p) => p.isFavorite));
        });
    });
}

但是我觉得这种语法很“重”,有没有更简洁的方法可以将 Observable 绑定为 BehaviorSubject 的子集?

【问题讨论】:

    标签: angular rxjs angular2-observables behaviorsubject


    【解决方案1】:

    您可以尝试关注。 BehaviorSubject 是可观察的。

    public pictures: BehaviorSubject<Array<Picture>>;
    public favoritesPictures: Observable<Array<Picture>>;
    
    constructor(private http: Http) { 
        this.pictures = new BehaviorSubject([]);
        this.favoritesPictures = this.pictures.map((a) => a.filter((p) => p.isFavorite));
    }
    

    【讨论】:

    • 感谢您的回答。这是个好主意,但是在这个 sn-p 中,p 是 Array 所以它没有 isFavorite 属性
    • 是的,就是这样,谢谢。你知道我在地图后面加上.share()有什么区别吗?
    • 我没有使用.share() 的经验,但基于documentation(可用示例)的副作用函数不会在每个订阅上调用,而只会调用一次。
    猜你喜欢
    • 2019-04-21
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多