Подписка на наблюдаемые, даже когда next не вызывается для BehaviorSubject

У меня есть простой сценарий:

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 ответ

Я решил свою проблему под руководством JB Nizel и Suren Srapyan. Заменив предмет поведения на предмет. Поскольку наблюдаемое подписывается в конструкторе, оно срабатывает и использует текущее сохраненное значение субъекта поведения, которое ранее было установлено в true другой функцией.

Взял ссылку от этого SO Но теперь столкнулся с другой проблемой, когда вызывается openComposeBox и msg регистрируется даже тогда, когда наблюдаемое не подписано. Я обновлю ответ, когда получу решение.

Другие вопросы по тегам