我最近在我的一个项目中配置了 NgRx,并为一个名为
OrderModel
的特定模型实施了动作、减速器和效果。
但是当我发送一个我配置了要在其上运行的效果的动作时,效果根本不会运行。
有人知道为什么吗?
这是我的
OrderModel
:
export interface OrderModel {
orderNumber?: number;
destination?: LatLngLiteral;
source?: LatLngLiteral;
accepted?: boolean;
sourceAddressText?: string;
destinationAddressText?: string;
}
以下是动作:
export const addRawOrder = createAction('[Order] Add new orders', props<{orders: OrderModel[]}>());
export const addOrder = createAction('[Order] Add new orders', props<{orders: OrderModel[]}>());
export const setSelectedOrder = createAction('[Order] Set selected order', props<{order: OrderModel}>());
export const setSelectedOrderAccepted = createAction('[Order] Set selected order accepted', props<{order: OrderModel}>());
这里是reducer代码:
import {addOrder, addRawOrder, setSelectedOrder, setSelectedOrderAccepted} from "./order-actions";
export interface OrderState {
orders: OrderModel[];
selectedOrder: OrderModel | null;
}
const initialState: OrderState = {orders: [], selectedOrder: null};
export const orderReducers = createReducer(initialState,
on(addRawOrder, (state, {orders}) => ({...state})),
on(addOrder, (state, {orders}) => ({...state, orders: [...state.orders, ...orders]})),
on(setSelectedOrder, (state, {order}) => ({...state, selectedOrder: order})),
on(setSelectedOrderAccepted, (state, {order}) => ({...state, selectedOrder: {...order, accepted: true}}))
);
效果代码如下:
@Injectable()
export class OrderEffects {
constructor(private actions$: Actions, private neshanService: NeshanService) {
}
getPosts$ = createEffect(() =>
this.actions$.pipe(
ofType(addRawOrder),
switchMap((action) => {
return this.neshanService.reverseGeocodingSourceDestinationOder(action.orders);
}),
map(orders => addOrder({orders: orders}))
)
)
}
这是
app.module.ts
的导入部分中的配置:
StoreModule.forRoot({orders: orderReducers}),
EffectsModule.forRoot([OrderEffects]),