0

我有一个简单的场景:

服务.ts:

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


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

组件.ts:

 constructor(
    private _service: Service,

  ) {

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

}

组件2.ts:

  showComposeBox() {

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

我在 openComposeMsg() 中记录了一条消息。我面临的问题是,我第一次正确订阅 showComposeBox observable 但第二次订阅时即使没有调用下一个,因为 msg "in openComposeBox" 没有登录到控制台。

无法理解 BehaviorSubject 的行为。我究竟做错了什么?

4

1 回答 1

2

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

这个 SO中引用 但现在面临另一个问题,即调用 openComposeBox 并记录 msg,即使未订阅 observable 也是如此。当我得到解决方案时,我会更新答案。

于 2018-07-13T07:40:57.243 回答