如何在角度中选择或连接两个ngrx实体?

时间:2018-01-02 17:13:33

标签: angular redux ngrx

我有两个与1对1相关的实体:加载和移动。 load对象包含load_id,move对象包含load_id。在UI中显示时,它将使用* ngFor循环显示组合对象。

export interface LogisticsState {
    plans: fromPlan.State;
    loads: fromLoad.State;
    moves: fromMove.State;
}

export const getPlansState = (state: LogisticsState) => state.plans;
export const getMoveState = (state: LogisticsState) => state.moves;
export const getLoadState = (state: LogisticsState) => state.loads;

我的选择

export const getMoveEntities = createSelector(getMoveState, fromMove.getEntities);
export const getLoadEntities = createSelector(getLoadState, fromLoad.getEntities);
export const getSelectedMoveId = createSelector(getMoveState, fromMove.getCurrentMoveId);

在我的组件中,我有两个可观察者在移动时单独监听并加载。

我正在尝试编写一个createSelector来返回一个包含组合对象/实体的新对象。

注意:我不想在商店中将它们组合在一起,因为在这个特定的页面上它只是像报告一样读取,但在另一个组件上它将被单独编辑。

初步方法

export const getLoadByMoveIdEntities = createSelector(getLoadState, getSelectedMoveId, (loads: LogisticsLoad[], selectedMove: LogisticsMove) => {
   if (loads && selectedMove) {
       return loads.filter((load: LogisticsLoad) => load.LoadId === selectedMove.LoadId);
   } else {
       return loads;
   }
});

这种方法不起作用,因为它要求我在我的状态下设置selectedMoveId。页面上可以显示100多条记录。

1 个答案:

答案 0 :(得分:1)

  

这种方法不起作用,因为它要求我在我的状态下设置selectedMoveId。页面上可以显示100多条记录。

您可以使用此尝试但使用import java.io.*; import java.util.*; public class MyFinal3 { static void exceptionFinal() throw RuntimeException eE{ System.out.println("Inside exceptionFinal"); throw RuntimeException(); } public static void main(String []args) { double myDouble[] = new double[5]; try { exceptionFinal(); System.out.println("Access element sixth :" + myDouble[6]); } catch (RuntimeException eE) { System.out.println("Exception thrown: 1"); } catch (Exception eE) { System.out.println("Exception thrown: 2"); } catch (ArrayIndexOutOfBoundsException eE) { System.out.println("Exception thrown: 3" ); } finally { System.out.println("Exception end" ); } System.out.println("Out of the block"); } } 数组而不是单个getCurrentMoveIds的方法。因此,商店中应该有一个数组,其中包含您提到的100多条记录的ID。同时尝试使用微小的选择器并将它们结合起来。一个示例方法:

getCurrentMoveId

如果您愿意,甚至可以在选择器中合并这两个实体数组。