ngrx / data не может получить selectId для использования идентификатора вместо идентификатора - PullRequest
0 голосов
/ 07 августа 2020

Совершенно новый для ngrx.

Мой идентификатор (заглавный идентификатор) не отображается - система пытается использовать идентификатор, что приводит к множественным ошибкам консоли. Я использую «@ ngrx / data»: «^ 8.6.0». Я использую 8. ?? потому что я на Angular 8 (планирую 9 в месяц). Могу ли я использовать более новую версию?

Я временно сопоставил идентификатор с идентификатором, и он работает, но каждый вызов бэкэнда выглядит одинаково, и это вызывает другие проблемы. как мне зарегистрировать свой selectId (он также может быть по умолчанию, все внутренние вызовы используют идентификатор.

У меня есть служба, зарегистрированная вручную - из-за преобразований для выравнивания данных:

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

Моя карта регистрирует переопределение идентификатора:

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(),
  ],
})

1 Ответ

0 голосов
/ 10 августа 2020

Я перемешивал свой раствор. Указанная выше служба была зарегистрирована в динамически загружаемой службе. Как только я сменил нужное место, все заработало. Я уверен, что другие когда-нибудь застрянут на этом, поэтому отправьте ответ, чтобы напомнить другим, что нужно проверить это.

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);
  }
}
...