Как подписать тему поведения с наблюдаемой - PullRequest
2 голосов
/ 22 января 2020

У меня есть сценарий, в котором я хочу получить текущее значение наблюдаемой переменной по клику пользователя, который является селектором магазина. Согласно принятому вопросу Этот Вопрос Я должен использовать Предмет Поведения. Но я получаю ab Observable значение от селектора магазина.

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

Ответы [ 3 ]

4 голосов
/ 22 января 2020

Если вы хотите получить такое поведение, вы должны использовать наблюдаемое, что у вас есть, и поделиться им + воспроизвести последнее значение. Хорошо, что для этого есть оператор: shareReplay.

Важное примечание: определите параметры shareReplay, иначе вы будете воспроизводить бесконечное число значений, и если никто больше не будет слушать наблюдаемое ... все равно останется открытым!

Так что сделайте следующее:

const replayedObs$ = originalObs$.pipe(
  shareReplay({ bufferSize: 1, refCount: true })
)

таким образом вы получите только последнее значение при подписке И если никто не слушает replayedObs$ больше он будет закрыт.

1 голос
/ 22 января 2020

Решение вашей проблемы будет следующим:

const observable = of(true);
const behaviorSubject = new BehaviorSubject(false);

observable.subscribe(res => behaviorSubject.next(res));

console.log(behaviorSubject.value);

https://stackblitz.com/edit/rxjs-xd4mpp

1 голос
/ 22 января 2020

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

Вот пример:

subject: BehaviorSubject<any> = new BehaviorSubject('initial value'); 

  showVal()
  {
    this.subject.subscribe(x => this.val = x);
  }

И здесь - это демонстрация StackBlitz.

...