У меня есть компонент, в котором я получаю несколько данных из разных состояний NgRx. Я не очень хорошо разбираюсь в Rx JS, и я борюсь с упорядочением потока данных.
Приведенный ниже код запускается при инициализации компонента:
// UI related display context
this.displayContextId$ = this.store.select(selectCurrentDisplayContextId);
this.displayContextId$.subscribe();
// Data related to this component's parent
this.currentItem$ = this.store.select(selectCurrentItem);
// Some data from the state
this.featureAData$ = this.store.select(featureADataByItemId(this.subItem.id));
this.featureBData$ = this.store.select(selectfeatureBDataByItemId(this.subItem.id));
this.featureBData$.subscribe();
// Some data that needs featureAData to be fetched
this.featureCData$ = this.featureAData$.pipe(
mergeMap(featureA => this.store.select(selectSomeDataById(featureA.someId)))
);
this.featureCData$.subscribe();
Псевдокод описывает суть того, чего я пытаюсь достичь и в настоящее время не работает:
// When displayContextId changes, select one specific item from the store which is identified by an id issued of the concatenation of other ids (from the data model specs)
this.displayContextId$.pipe(
).subscribe(displayContextId => {
switch (displayContextId) {
case DisplayContexts.TypeA:
this.displayContextItem$ = this.featureAData$.pipe(
mergeMap(featureA => this.store.select(selectDisplayContextItemById(displayContextId + '-' + featureA.someId)))
);
break;
case DisplayContexts.TypeB:
console.log(d);
this.displayContextItem$ = this.featureCData$.pipe(
mergeMap(featureC => this.store.select(selectDisplayContextItemItemById(displayContextId + '-' + featureC.someId)))
);
break;
}
});
this.displayContextItem$.subscribe();
Я прекрасно понимаю, что это не Rx JS способ сделать это. Моя цель состоит в том, чтобы динамически повторно выбирать данные из хранилища на основе различных источников ввода, которые развиваются в течение жизненного цикла компонента.
Кроме того, я не знаю, где поместить это в жизненный цикл компонента.
Какая может быть рабочая реализация этого?
Большое спасибо,