0

对ngrx来说是全新的。

我的 ID(大写 ID)没有被映射 - 系统正在尝试使用 id,导致多个控制台错误。我正在使用“@ngrx/data”:“^8.6.0”。我用的是 8.?? 因为我在 Angular 8 上(计划一个月 9 次)。我可以使用更新的版本吗?

我已将 Id 临时映射到 id 并且它可以工作,但每个后端调用看起来都一样,它会导致其他问题得以解决。如何注册我的 selectId(它也可以是默认值,所有后端调用都使用 Id.

我有一个手动注册的服务-由于对齐数据的转换:

export class PregateService extends DefaultDataService<Pregate>
    super('Pregate', http, httpUrlGenerator);

我的地图注册了 id 覆盖:

export function UpperId(entity: any): string {
  return entity.Id;
}

export const entityMetadata: EntityMetadataMap = {
  Pregate:  {
    selectId: UpperId,
  },
  // Stackrun: {},
  // Staging: {}
};

通过模块注册:


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

1 回答 1

0

我正在混合我的解决方案。上面的服务是在动态加载的服务中注册的。一旦我改变了正确的地方,它就完美地工作了。我相信其他人有时会被这个卡住,所以发布一个答案来提醒其他人检查它。

export class PreGateModule {
  readonly entityMetadata: EntityMetadataMap = {
    Pregate: {
      entityName: 'Pregate',
      selectId: UpperId,
    },
  };

  constructor(
    eds: EntityDefinitionService,
    data: EntityDataService,
    http: HttpClient,
    base: BaseApisProvider
  ) {
    const ps = new PregateService(http, base);
    data.registerService('Pregate', ps);
    eds.registerMetadataMap(this.entityMetadata);
  }
}
于 2020-08-10T00:45:46.333 回答