使用@ ngrx / data,获取“实体类型[x]没有EntityDefinition”

我试图使用@ ngrx / data在Angular中创建一个简单的服务,并且在组件运行时收到错误EntityDefinition for entity type "Position".

我的EntityMetadataMap是这样的:

const entityMetaData: EntityMetadataMap = {
  Employee: {},Position: {}
};

const pluralNames = { Employee: 'Employees',Position: 'Positions' };

export const entityConfig = {
  entityMetaData,pluralNames,};

我的商店模块是这样的:

@NgModule({
  declarations: [],imports: [
    StoreModule.forRoot({}),EffectsModule.forRoot([]),StoreDevtoolsModule.instrument(),EntityDataModule.forRoot(entityConfig),],providers: [
    {provide: DefaultDataServiceConfig,useValue: defaultDataServiceConfig},PositionsDataService
  ]

})
export class ItwStoreModule {
  constructor() {
    console.log(entityConfig);
  }
}

我的职位数据服务是这样:

@Injectable({ providedIn: 'root' })
export class PositionsDataService extends EntityCollectionServiceBase<Position> {
  constructor(serviceFactory: EntityCollectionServiceElementsFactory) {
    super('Position',serviceFactory);
  }
}

我可以在模块设置和EntityDataModule中放置一个断点,并且可以看到实体定义存在并且设置正确(作为EntityDataModule.forRoot(entityConfig)的一部分。

但是当服务的构造函数触发并调用super(...)时,在调试器中,我可以看到传入的EntityCollectionServiceElementsFactory中没有EntityDefinitions(请注意,“ definitions”为空):

使用@ ngrx / data,获取“实体类型[x]没有EntityDefinition”

我在这里做错了什么? 显然,在启动存储模块与依赖项注入将EntityCollectionServiceElementsFactory注入服务中之间,出现了问题。

songnn 回答:使用@ ngrx / data,获取“实体类型[x]没有EntityDefinition”

为了轻松使用实体,这是一个示例

在您的store.states.ts

export interface State {
    store_A: STATE_A;
}

export interface STATE_A extends EntityState<ClassA> {}

export const adapter: EntityAdapter<ClassA> = createEntityAdapter<ClassA>({
    selectId: (params: ClassA) => params.id
});

export const initialState: State = {
    store_A: aAdapter.getInitialState({})
};

在您的store.selector.ts

export const getMainState = createFeatureSelector<State>('root-feature');

export const getStateA = createSelector(getMainState,(state) => state.stateA);

export const getAllStateA = createSelector(getStateA,(state) => adapter.getSelectors().selectAll);

在您的服务或组件中:

this.store.select(getAllStateA) // Observable of all item A

在减速器中:

...
  on(
    MyAction,(state,{ itemAs }) => {
      return adapter.addAll(itemAs,{ ...state });
    }
  ),...
,

您有错字:-

应为entityMetadata

,

在提供配置时,请确保使用属性名称entityConfig。例如:

const mySampleEntityMetadata : EntityMetadataMap = {
    Hero: {},Villain: {}
};

...

export const entityConfig = {
    entityMetadata: mySampleEntityMetadata,pluralNames
};
本文链接:https://www.f2er.com/3151852.html

大家都在问