订阅后的行为主题会在取消订阅后产生新旧价值

时间:2018-10-27 16:21:02

标签: angular reactjs

我正在使用“行为”主题来选择版本。

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()
}

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

1 个答案:

答案 0 :(得分:-2)

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

用极端的基本术语来说,

Behavior Subject保留先前的数据以供所有订户重用(可以在不使用可观察的代码的情况下随时检索该数据),并将无限期地返回该旧数据。您还可以向其中添加更多数据,这就是为什么您看到自己的效果的原因。

Subject返回并忘记了,因此切换到该位置,您应该会很高兴。