Поведение при подписке с указанием старого и нового значения после отписки - PullRequest
0 голосов
/ 27 октября 2018

Я использую тему поведения, чтобы получить выбранную версию.

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

В компоненте слайдера я устанавливаю версию по щелчку, которая используется для создания компонента слайд chart.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 голосов
/ 27 октября 2018

У меня была похожая проблема при использовании Behavior Subject.Переключение на Subject решило проблему.

Behavior Subject, в крайнем базовом выражении, сохраняет предыдущие данные для повторного использования всеми подписчиками (которые могут быть извлечены в любой момент без использования наблюдаемого кода) и вернет этостарые данные на неопределенный срок.Вы также можете добавить к нему больше данных, и я думаю, именно поэтому вы видите эффект, которым вы являетесь.

Subject возвращается и забывает, так что переключитесь на это, и вы должны быть золотыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...