在ngrx选择器中的两个数组之间分配参数的正确方法是什么

时间:2018-04-30 20:50:43

标签: angular css-selectors ngrx

我在ngrx选择器内的两个数组之间分配参数时遇到问题。

问题1:如果我发出这样的两个动作:

startingtime

所以我的选择器工作正常:

this.store.dispatch(new GetArray);
this.store.dispatch(new GetAssociates);

但是我的情况是" array"数据已经预先加载并且选择器“getArray”已经预先加载了。已有数据,在这种情况下,我试图排除对api的不必要调用,仅调度/* array data */ export const getArray = createSelector(selectArrayFeature, (state: fromArray.State) => state.array); /* associates data */ export const getAssociates = createSelector(selectAssociatesFeature, (state: fromAssociates.State) => state.associates); /* mapped array */ export const getArrayWithAssociateName = createSelector(getArray, getAssociates, (array, associates) => { return array.map(item => { const obj = associates.find(val => val.id === item.eventTypeId); item.name = obj ? obj.label : null; return item }); }); getArrayWithAssociateName`返回一个没有关联名称的数组。

问题2:关联是非常昂贵的调用,因此如果在选择器检查之后收到数据,它也会返回没有映射名称的数组。

那么有人可以帮我找到我做错的事吗?提前谢谢

1 个答案:

答案 0 :(得分:0)

创建选择器hasAssociates来检查何时使用getArrayWithAssociateName

export const hasAssociates = createSelector(
  selectAssociatesFeature,
  (state: fromAssociates.State) => !!state.associates.length
);

或验证选择器中的数组。

export const getArrayWithAssociateName = createSelector(
  getArray, 
  getAssociates, 
  (array, associates) => {
      if(!array.length || !associates.length) return [];
      // return mapping
    }
);