订阅上的BehaviorSubject在取消订阅后发出新旧值



我正在使用Behavior主题来获取所选版本。

public messageSource = new BehaviorSubject(release);
currentMessage =this.messageSource.asObservable()
setCheckedVersion(chkVersion){
console.log(chkVersion)
this.messageSource.next(chkVersion)
}

在滑块组件中,我正在设置单击时的版本,用于生成图表。IN滑块组件

setCheckedVersion(chkVersion){
this.messageSource.next(chkVersion)
}

在图表组件中,我订阅了的更改

this.curMsg= this._sharedService.currentMessage.subscribe((chkVersion)=>
{this.checked_versions=chkVersion})

一切都很好,但当我改变路线并回到图表组件时,它会被订阅两次。为此,我已在OnDestroy 中取消订阅

ngOnDestroy() {
gantt.clearAll()
// this.curView.
this.curMsg.unsubscribe()
}

但当我再次订阅时,它会得到两个值,一个是最新数据,另一个是在路由之前选择的。如何只获取最新数据?

我在使用Behavior Subject时遇到了类似的问题。切换到Subject解决了此问题。

从最基本的角度来看,Behavior Subject保留以前的数据供所有订阅者重用(可以在任何时候检索,而不使用可观察的代码(,并将无限期地返回旧数据。你也可以添加更多的数据,我认为这就是为什么你看到了你现在的效果。

Subject返回并忘记,所以切换到它,你应该是金色的。

最新更新