Хорошо, я не могу понять, как сделать это более эффективно.Честно говоря, я не очень хорошо понимаю эту схему, но меня бросили в глубокий конец.Таким образом, у меня есть решатель, получающий наблюдаемый для соответствующего Плана для формы.Тем не менее, благодаря странице, с которой я перемещаюсь, я эффективно выполнил небольшую загрузку плана, которая хранится в состоянии.Поэтому, когда происходит загрузка, а не возвращение полностью перемещенного объекта, я получаю небольшую нагрузку.Единственное, что я понял, как это исправить - это сначала удалить его из состояния.Это кажется глупым .Как настроить эффект для удаления / загрузки, возможно, передав параметр?
export class PlanResolver implements Resolve<Observable<Plan>> {
public plan$: Observable<Plan>;
constructor(public store: Store<fromRoot.State>) {
this.plan$ = store.select<Plan>(fromRoot.getSelectedPlan);
}
resolve(route: ActivatedRouteSnapshot) {
let id = +route.paramMap.get('id');
console.info(id);
this.store.dispatch(new PlanActions.Remove(id)); //This seems silly
this.store.dispatch(new PlanActions.Load(id));
return of(this.plan$);
}
Редуктор:
case PlanActionTypes.LoadSuccess: {
return adapter.addOne(action.payload, {
...state,
selectedPlanId: state.selectedPlanId,
});
}
case PlanActionTypes.Load: {
return {
...state,
selectedPlanId: action.payload,
};
}
Эффект:
@Effect()
loadPlan$: Observable<Action> = this.actions$
.ofType<Load>(PlanActionTypes.Load).pipe(
switchMap(action => this.planService.getPlan(action.payload)),
map((plan: Plan) => new LoadSuccess(plan)),
catchError(err => {
toastr.error(`Could not load plan.`);
console.error(err);
return of(new LoadFail(err));
})
);
Действие:
export class Load implements Action {
readonly type = PlanActionTypes.Load;
constructor(public payload: number) {}
}
export class LoadSuccess implements Action {
readonly type = PlanActionTypes.LoadSuccess;
constructor(public payload: Plan) {}
}
export class LoadFail implements Action {
readonly type = PlanActionTypes.LoadFail;
constructor(public payload: any) {}
}
РЕДАКТИРОВАТЬ: Итак, я получаю план {a: значение b: значение c - z: null}
и я ожидаю Plan {a: value ....z: значение}
Удалив сначала, я получаю ожидаемый результат.