我有一项包含以下内容的服务:
private menuBuilderCompleted: BehaviorSubject<any> = new BehaviorSubject({});
menuBuilderCompleted$ = this.menuBuilderCompleted.asObservable();
menuBuildComplete(data) {
this.menuBuilderCompleted.next(data);
}
在组件中,我有以下订阅:
private subscription: Subscription = new Subscription();
,然后使用:
this.subscription.add(this.headerService.menuBuilderCompleted$.subscribe((data) => {
this.wasInComponent = false;
}));
我的问题是,当我在解决方案中搜索源代码时,我再也看不到对menuBuildComplete的调用,但是如果我在menuBuilderCompelted $ .subscribe中添加调试器语句,就会看到它命中。如果我从不打电话给下一个电话怎么回事?
答案 0 :(得分:3)
BehaviorSubject总是发出至少一个值。
const a$ = new BehaviorSubject("Hello World");
a$.subscribe(value => console.log(value)); // prints "Hello World"
答案 1 :(得分:3)
与Subject相对,BehaviorSubject具有“开始”值(在这种情况下,它将是一个空对象{})。
通过设置此起始值,将向BehaviorSubject的所有订阅者通知该起始值。
答案 2 :(得分:2)
这是因为BehaviorSubject
用一个空对象初始化,因此预订正在订阅该初始化值。
如果要使用字符串private menuBuilderCompleted: BehaviorSubject<any> = new BehaviorSubject('hello world');
然后您将在控制台hello world
中看到正在打印的