首页 > 解决方案 > Ngrx 选择器未定义的 EntityAdapter

问题描述

在这个问题上兜圈子。每次我似乎使用选择器时,它都是未定义的。我检查了其他帖子以及我已经拥有的他们缺少的代码。使用选择器时我一直不确定。我也有 ngrx devtools 设置。任何帮助将不胜感激。

零件:

import * as fromBusiness from '@app/@store/reducers/index';

    ngOnInit(): void {
    const id = this.params.id;
    this.business$ = this.store.pipe(select(fromBusiness.getBusinessEntityById(), { id }))
    .pipe(
      map((business: BusinessModel) => {
        return this.business = business;
      }),
    );
    console.log(this.business);
  }

功能模块

StoreModule.forFeature('businesses', fromBusiness.businessFuncReducer),

减速器:

export interface State extends EntityState<BusinessModel> {}

export const adapter: EntityAdapter<BusinessModel> = createEntityAdapter<
  BusinessModel
>( {
  selectId: (business: BusinessModel) => business.id,
});

export const initialState = adapter.getInitialState({});

export const businessReducer = createReducer(
  initialState,
  //reducer methods here, upsertone, addone etc
);

export function businessFuncReducer(state: State | undefined, action: Action) {
  return businessReducer(state, action);
}

export const businessFeatureSelector = createFeatureSelector<State>(
  'businesses'
);

export const {
  selectIds,
  selectEntities,
  selectAll,
  selectTotal,
} = adapter.getSelectors();


export const getAllBusinesses = createSelector(
  businessFeatureSelector,
  selectAll
);

减速器.index.ts

export interface State {
  business: fromBusiness.State;
}

export const selectBusinessState = createFeatureSelector<fromBusiness.State>(
  'businesses'
);

export const selectBusinessEntities = createSelector(
  selectBusinessState,
  fromBusiness.selectEntities
);

export const getBusinessEntityById = () => {
  return createSelector(
    selectBusinessEntities,
    (entities: Dictionary<BusinessModel>, props: {id: string}) => {
      return entities[props.id];
    },
  );
};

感谢您对此的任何帮助。花了2天没有解决方案。附件是 devtools 树的屏幕截图。

在此处输入图像描述

标签: angularngrx

解决方案


事实证明,这不是选择器或模块。这就是我消费它的方式。周围的例子对我不起作用,所以我的做法略有不同。


推荐阅读