Подписка на переменную в rxjs - PullRequest
0 голосов
/ 30 мая 2019

В моем компоненте я подписываюсь на переменную, подобную этой:

import { Subject, of } from 'rxjs'

....
distance: number
constructor() {
    this.distance = 0;
    this.getDistance().subscribe(
      (newDistanceValue) => {
        console.log('newDistanceValue', newDistanceValue)
      }
    )
    ....
}

getDistance(): Observable<number> {
   return of(this.distance);
}

Я получаю следующий вывод для начального значения переменной.

newDistanceValue 0

...но когда я изменяю значение в других методах компонента, подписчик не выводит новое значение расстояния.

Чего мне не хватает?

1 Ответ

1 голос
/ 30 мая 2019

Это rxjs, а не rsjx:)

вы генерируете новый Observable каждый раз, когда вы вызываете getDistance, и он генерирует только одно значение, которое является текущим значением distance, вы должны сделать этоBehaviorSubject вместо

import { BehaviorSubject } from 'rxjs'

....
distance$ = new BehaviorSubject(0)
constructor() {
    this.distance$.subscribe(
      (newDistanceValue) => {
        console.log('newDistanceValue', newDistanceValue)
      }
    )
    // or get value of distance synchronously
    console.log(this.distance$.getValue())
    ....
}

foo() {
    this.distance$.next(1)
}
...