Подписка на наблюдаемые, даже когда 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 регистрируется даже тогда, когда наблюдаемое не подписано. Я обновлю ответ, когда получу решение.