Получить текущее значение селектора ngrx без подписки - PullRequest
1 голос
/ 06 января 2020

У меня есть состояние ngrx следующим образом

state.data state.dataArchived

Я хотел бы скопировать данные из store.data в state.dataArchived.

selectedSchedulingsOnPopup$ = this.store.pipe(select(selectSchedulingsByBranch));
ngOnInit() {
  this.store.dispatch(new GetDirectionsOnGraph({}));
  this.selectedSchedulingsOnPopup$.subscribe(value => {
    this.selectedSchedulingsOnPopupValue = value;
    this.store.dispatch(new GetDirectionsOnGraph(this.selectedSchedulingsOnPopupValue));
  });
}

проблема в том, что state.data меняется, state.dataArchived тоже меняется

Поэтому я хотел бы получить текущее значение state.data без подписки на него.

Ответы [ 2 ]

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

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

async ngOnInit() {
  const data = await this.store.pipe(select(selectorForData),
                               take(1)).toPromise();
}

Имейте в виду, что таким способом обещания , он будет реагировать только один раз и получать данные и продолжать. Если вы хотите получать информацию об изменениях фрагмента данных, вы должны подписаться на него, другого пути нет.

0 голосов
/ 07 января 2020

Если вам просто нужно первое значение, а затем игнорировать все последующие изменения, используйте оператор first ():

  ngOnInit() {
    this.store.dispatch(new GetDirectionsOnGraph({}));
    this.selectedSchedulingsOnPopup$.pipe(first())
      .subscribe(value => {
        this.selectedSchedulingsOnPopupValue = value;
        this.store.dispatch(new GetDirectionsOnGraph(this.selectedSchedulingsOnPopupValue));
      });
  }
...