2017-10-11 78 views
0

我想使用默認值的主題發出值。startWith()返回主題

startWith("def")是此方法。

subject = new Rx.Subject().startWith("def value"); 

不幸startWIth回報Observable,所以我不能使用onNext(),這是我使用的首位主題的唯一原因。這個問題的解決方法是什麼?

subject.onNext("next val"); //cannot call onNext, it is not a function of Observable 

回答

3

只是跟蹤可觀察的和主題。我通常做類似...

export class FooService { 

    private _foos: Subject<Foo> = new subject<Foo>(); 

    public get foos: Observable<Foo> { 
    return this._foos.startsWith(...); 
    } 

    public emitFoo(foo: Foo) { 
    this._foos.next(foo); 
    } 

} 
2

你的問題並不完全清楚。如果你希望所有觀察者在其他任何事情之前看到「def value」,那麼使用@Pace的答案。

但是如果你想所有觀察員開始以「最近發出的價值」,你發出的第一個值之前使用「Def值」,如果他們訂閱,然後用BehaviorSubject

var subject = new BehaviorSubject("default val"); 
subject.subscribe(...); // sees "default val", then anything you emit. 

subject.next("foo"); 
subject.subscribe(...); // sees "foo", then anything else you emit (does not see "default val")