Я передаю параметр на страницу «Сведения об учетной записи», которая вызывает веб-API для получения сведений об учетной записи.
При первой загрузке страницы «Сведения об учетной записи» ничего не отображается, если я захожу в другую учетную запись, отображаются сведения о предыдущей учетной записи (это продолжается, т.е. следующая учетная запись будет отображать предыдущую).
Я попытался изменить порядок отправки и выбора, также попытался переместить отправку в конструктор, но я все еще получаю то же поведение.
Это то, чем я сейчас занимаюсь....
Сведения об учетной записи — (CustomerAccountDetailed содержит значения)
actionsSubscription: Subscription;
customerAccount$: Observable<CustomerAccountDetailed>;
constructor(private store: Store<IAppState>,
private actions: SalesLedgerActions,
private route: ActivatedRoute) {
}
ngOnInit(): void {
this.actionsSubscription = this.route.params.subscribe(params => {
this.store.dispatch(this.actions.fetchSingleCustomerAccount(params.id));
this.customerAccount$ = this.store.select(getCustomerAccount);
});
}
public ngOnDestroy(): void {
this.actionsSubscription.unsubscribe();
}
SalesLedgerEffects
@Effect()
FetchSingleAccount$ = this.actions$
.ofType(SalesLedgerActions.FETCH_CUSTOMER_ACCOUNT)
.switchMap((action: Action) => {
return this.customerApiService.getCustomerDetail(action.payload);
})
.map((customerAccount: ItemDto<CustomerAccountDetailed>) => this.actions.fetchSingleCustomerAccountSuccess(customerAccount));
SalesLedgerReducer
case SalesLedgerActions.FETCH_CUSTOMER_ACCOUNT_SUCCESS:
const customerAccount: ItemDto<CustomerAccountDetailed> = payload as ItemDto<CustomerAccountDetailed>;
return Object.assign({}, state, { selectedAccount: customerAccount.result as CustomerAccountDetailed }) as ISaleLedgerState;
селекторы
export function fetchCustomerRecord(state: ISaleLedgerState): any {
return state.selectedAccount;
}
// *************************** PUBLIC API's ****************************
export const getCustomerAccount: any = createSelector(getSalesLedgerState, fetchCustomerRecord);