我想使用Subject使用默认值发出值。
startWith("def")
就是这个方法。
subject = new Rx.Subject().startWith("def value");
遗憾的是startWIth
返回Observable
,因此我无法使用onNext()
,这是我首先使用Subject的唯一原因。这个问题的解决方法是什么?
subject.onNext("next val"); //cannot call onNext, it is not a function of Observable
答案 0 :(得分:4)
只需跟踪可观察量和主题。我经常做类似......
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);
}
}
答案 1 :(得分:3)
你的问题并不完全清楚。如果你希望所有观察者在其他任何事情之前看到“def值”,那么请使用@Pace的答案。
但是如果你想让所有观察者都以“最近发出的值”开头,并且如果他们在你发出第一个值之前订阅了“def value”,那么使用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")