Angular 6 Ngrx存储来自其他要素缩减程序正在侦听的要素的操作

时间:2018-10-12 13:34:27

标签: angular rxjs angular6 ngrx ngrx-store

我有两个功能,订单和物品。在订单功能中,我有一个调度动作的组件。

简而言之,它看起来像这样:

constructor(store: Store<OrdersStateContract>) {

    this.orders_subs = store.pipe(select('orders')).subscribe( (orders) => {
      this.orders = orders.orders;
    });

    this.store = store;
}

ngOnInit() : void {
    this.store.dispatch( new LoadOrders({}) );
}

我意识到当我分派动作LoadOrders时,它会被项功能减少器所捕获。这是常见的行为吗?还是有什么问题?

orders.module.ts

@NgModule({
  declarations: [
],
imports : [
    MaterialModule,
    BrowserModule,
    StoreModule.forFeature('orders', OrdersReducer),
    EffectsModule.forFeature([OrdersEffects]),
],
providers : [
    OrderService
]
})

items.module.ts

@NgModule({
  declarations: [
    /*not important*/
  ],
  imports : [
    MaterialModule,
    BrowserModule,
    StoreModule.forFeature('items', ItemsReducer),
    EffectsModule.forFeature([ItemsEffects])
  ]
})

items.reducer.ts

export const ItemsReducer = (state: ItemsStateContract = initialState,
                             action: ItemActions) => {


    switch (action.type) {
        case ItemActionTypes.ItemsFromOrderLoadSuccess:
            return adapter.addAll(action.payload.items, state);

        default:
            return state;

    }
};

orders.reducer.ts

export const OrdersReducer = (state: OrdersStateContract = initialState,
                              action: OrderActions) => {

  switch (action.type) {

    case OrderActionTypes.LoadOrders: {
      return adapter.addAll(action.payload.orders, state);
    }

    default: {
      return state;
    }
  }
};

1 个答案:

答案 0 :(得分:1)

TL; DR;这是正常现象。

就这么简单: 任何级别的减速器都可以捕获任何级别的每个已调度动作。 (只有效果器或减速器可以决定对它做某事或忽略它)

在效果中,您可以在ngrx中使用ofType自定义rxjs运算符。 (基本上是按操作类型的filter)。

在化简器中,您可以检查动作类型并更改所需动作的状态。