NgRx Data DefaultDataServiceConfig

Я только начал использовать NgRx Data в своем проекте, пару часов ищу и не могу найти решение проблемы, с которой я столкнулся.

Я пытаюсь изменить корень вызовов по умолчанию, используя DefaultDataServiceConfig следующим образом:

app.module.ts

export const defaultDataServiceConfig: DefaultDataServiceConfig = {
  root: `${environment.apiUrl}/`,
};

@NgModel({
   ...
   providers: [
      {
         provide: DefaultDataServiceConfig
         useValue: defaultDataServiceConfig
      }
   ]
});

environment.ts

export const environment = {
   ...
   apiUrl: 'https://my-api.com/v1',
};

Однако вызов направляется на localhost http://localhost:3000/client/list, а не на my-api.com https://my-api.com/v1/client/list.

Что-то мне не хватает? Я не могу найти никаких примеров, а документация по ngrx.io оставляет желать лучшего.


person Sergiu Molnar    schedule 11.05.2020    source источник


Ответы (2)


Я столкнулся с той же проблемой.

Проверьте DefaultDataService Doc, четвертый аргумент в его конструкторе является необязательным и undefined по умолчанию. Когда вы расширяете этот класс, создавая свою собственную службу, передайте аргумент конфигурации следующим образом:

@Injectable()
export class EmployersDataService extends DefaultDataService<Employer> {
  constructor(
    http: HttpClient,
    httpUrlGenerator: HttpUrlGenerator,
    config: DefaultDataServiceConfig
  ) {
    super('Employer', http, httpUrlGenerator, config);
  }
}

Тогда будет работать DefaultDataServiceConfig, предоставленный в app.module.ts.

person elobuho    schedule 21.09.2020

Вы должны импортировать его на том же уровне, где вы импортируете EntityDataModule.

@NgModule({
    declarations: [
        DataComponent,
    ],
    imports: [
        CommonModule,
        EntityDataModule.forRoot(entityConfig)
    ],
    providers: [
        {
            provide: DefaultDataServiceConfig,
            useValue: {
                root: environment.apiUrl,
            },
        }
    ],
    exports: [
        DataComponent,
    ],
})

Если по какой-либо причине это не работает для вас - вы можете указать свой собственный HttpUrlGenerator, он разрешает URL-адреса для каждой сущности.

export abstract class HttpUrlGenerator {
  abstract entityResource(entityName: string, root: string): string;

  abstract collectionResource(entityName: string, root: string): string;

  abstract registerHttpResourceUrls(
    entityHttpResourceUrls?: EntityHttpResourceUrls
  ): void;
}
person satanTime    schedule 11.05.2020
comment
С HttpUrlGenerator работает должным образом, но когда я пытаюсь использовать DefaultDataServiceConfig в app.module, изменения не применяются, и я не могу понять, почему. Я пытаюсь установить DefaultDataServiceConfig, потому что не хочу устанавливать это в каждой службе. - person Sergiu Molnar; 12.05.2020
comment
Вчера я протестировал его на новом проекте angular 9 ngrx data 9, и DefaultDataServiceConfig сработал. Вот почему я предположил, что импорт неверен. Есть ли у вас другие плагины, использующие ngrx / data? возможно, один из них отменяет настройку. Как вариант - поставьте точку останова в HttpUrlGenerator`, чтобы увидеть трассировку стека и определить, какие данные были введены в службу. Возможно, это проливает свет на источник проблемы. - person satanTime; 12.05.2020