我有一个保存在商店中的对象,我想订阅一些属性。
我正在使用NgRx 6.1.2
,但是我有很多关于如何倾听某些状态属性(包括嵌套属性)的变化的问题。
我的意图是使用两个属性来验证加载数据是否完成,而其他属性用于填充组件变量和呈现组件,
我写了这个,但没有工作,因为它监听整个商店的变化,而不是选择的属性。
this.isLoading = true;
this.inicioSubs = this.store
.pipe(
select(state => {
return {
temas: state.multimedia.multimedia.temas,
series: state.multimedia.multimedia.series,
lastSerie: state.multimedia.multimedia.lastSerie,
lastTwoYearsSeries: state.multimedia.multimedia.lastTwoYearsSeries,
lastTwoYearsTemas: state.multimedia.multimedia.lastTwoYearsTemas,
loaded: state.multimedia.loaded,
loading: state.multimedia.loading
};
}),
filter(multimedia => multimedia.loaded && !multimedia.loading)
)
.subscribe(state => {
this.multimedia = {
temas: state.temas,
series: state.series,
lastSerie: state.lastSerie,
lastTwoYearsSeries: state.lastTwoYearsSeries,
lastTwoYearsTemas: state.lastTwoYearsTemas
};
this.isLoading = false;
});
发布于 2018-12-17 20:09:18
您可以这样编写选择器:
export const getMultimedia = (state: AppState) => state.multimedia;
export const getMultimedia = createSelector(
getMultimediaState,
multimediaState => multimedia.loading
);
或者,如果您正在使用根状态初始化,如下所示
StoreModule.forFeature('multimedia', reducers);
那么您的multimedia.selectors.ts文件应该如下所示:
export const getMultimediaState createFeatureSelector<MultimediaState>('multimedia');
export const getMultimedia = createSelector(
getMultimediaState,
multimediaState => multimedia.loading
);
export const getLoadedMultimedia = createSelector(
getMultimediaState,
multimediaState => multimediaState.filter(
multimedia => multimedia.loaded && !multimedia.loading)
);
使用createFeatureSelector
,您可以返回顶级特性状态。
然后,在组件文件中订阅选择器,如下所示:
public loadedMultimedia$;
public isMultimediaLoading$;
constructor(store) {
this.loadedMultimedia$ = store.pipe(select(getLoadedMultimedia));
this.isMultimediaLoading$ = store.pipe(select(getMultimediaLoadingStatus));
}
https://stackoverflow.com/questions/53825476
复制相似问题