Angular 如何在重新加载api调用时仅从ngrx/store获取最新数据
我在angular应用程序中使用ngrx/store和ngrx/effects 我的问题是reducer中的选择器在从特性状态调用api后返回旧值和新值。下面是我的代码: 减速机Angular 如何在重新加载api调用时仅从ngrx/store获取最新数据,angular,asp.net-mvc,typescript,rxjs,ngrx,Angular,Asp.net Mvc,Typescript,Rxjs,Ngrx,我在angular应用程序中使用ngrx/store和ngrx/effects 我的问题是reducer中的选择器在从特性状态调用api后返回旧值和新值。下面是我的代码: 减速机 case PortfolioActions.PortActionTypes.LOAD_SUCCESS_TRADE_NAV: return { ...state, navData: action.payload, isLoadingNav: false };
case PortfolioActions.PortActionTypes.LOAD_SUCCESS_TRADE_NAV:
return {
...state,
navData: action.payload,
isLoadingNav: false
};
export const getNavData = createSelector(
getPortfolioFeatureState,
state => state.navData
);
实际上是
@Effect()
loadNav$: Observable<Action> = this.action$.pipe(
ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
.pipe(
map((data) => {
return new fromPortfolio.LoadSuccessTradeNAV(data)
})
)
)
);
在组件中,当我调用reload()
方法时,在subscribe()
中,我总是获取旧数据,然后在api调用完成后获取新数据
我的问题是,只有在api加载成功后,我如何才能获取存储数据
@Effect()
loadNav$: Observable<Action> = this.action$.pipe(
ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
withLatestFrom(this.store.pipe(select(selector))), // pass in your selector here in select()
switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
.pipe(
map((data) => {
return new fromPortfolio.LoadSuccessTradeNAV(data)
})
)
)
);
看来我们很接近了。我在重新加载时获得上一个值,而不是当前值。
@Effect()
loadNav$: Observable<Action> = this.action$.pipe(
ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
withLatestFrom(this.store.pipe(select(selector))), // pass in your selector here in select()
switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
.pipe(
map((data) => {
return new fromPortfolio.LoadSuccessTradeNAV(data)
})
)
)
);
ngOnInit() {
this.portStore.pipe(
select(fromPortfolio.getNavData),
filter(f => !!f),
takeWhile(() => this.componentActive))
.subscribe((fmtRes) => {
console.log(fmtRes) //Issue here
this.data = fmtRes;
})
}