我有一个简单的场景:
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的行为。 我在做什么错了?
答案 0 :(得分:0)
我在JB Nizel和Suren Srapyan的指导下解决了我的问题。通过用主体替换行为主体。在构造函数中预订可观察到的值时,它会触发并使用行为主体当前保存的值,该值之前已由其他函数设置为true。
从This SO获取参考 但是现在面临另一个问题,即即使未订阅observable,也会调用openComposeBox并记录味精。得到解决方案后,我将更新答案。