订阅如何被调用?

时间:2019-09-03 14:17:44

标签: angular rxjs

我有一项包含以下内容的服务:

  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中添加调试器语句,就会看到它命中。如果我从不打电话给下一个电话怎么回事?

3 个答案:

答案 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中看到正在打印的