订阅可观察的,即使在BehaviorSubject上未调用next时

时间:2018-07-13 06:35:20

标签: angular angular2-observables angular-observable

我有一个简单的场景:

service.ts:

  private showComposeBoxAction = new BehaviorSubject<boolean>(null);
  showComposeBox = this.showComposeBoxAction.asObservable();


  openComposeBox(event:boolean) {
    console.log("in openComposeBox");
    this.showComposeBoxAction.next(event);
  }

Component.ts:

 constructor(
    private _service: Service,

  ) {

    this.subscriptions.add(
      this._mailingService.showComposeBox.subscribe(event => {
        if (event) {
          this.displayCompose = true;
          console.log("showComposeBox displayCompose", this.displayCompose);
        }
      })
    );

}

component2.ts:

  showComposeBox() {

    if (this.count === 0) {
      this._service.openComposeBox(true);
    }
  }

我已经在openComposeMsg()中记录了一个味精。 我面临的问题是,我第一次正确地订阅了showComposeBox可观察的消息,但是第二次即使在未调用next时也进行了订阅,因为msg“在openComposeBox中”没有登录控制台。

无法了解BehaviorSubject的行为。 我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我在JB Nizel和Suren Srapyan的指导下解决了我的问题。通过用主体替换行为主体。在构造函数中预订可观察到的值时,它会触发并使用行为主体当前保存的值,该值之前已由其他函数设置为true。

This SO获取参考 但是现在面临另一个问题,即即使未订阅observable,也会调用openComposeBox并记录味精。得到解决方案后,我将更新答案。