ngrx/data: лучший способ иметь несколько корней api?

Мне нужно было бы настроить таргетинг на разные корни конечных точек api из разных модулей angular.

Например

Из того, что я вижу, корень api, вызываемый ngrx / data, может быть изменен, но только глобально, с помощью DefaultDataServiceConfig в app.module

Как я могу иметь разные корни api в разных модулях Angular?

На данный момент я использую CustomizeHttpUrlGenerator чтобы изменить URL-адреса на основе моего соглашения об именах, но я думаю, что есть способ лучше.

Спасибо

3 ответа

Создайте провайдера и измените его, когда захотите.

const API_ROOT = new InjectionToken<string>('BASE_HREF', {
    factory: () => 'http://server:port/user-api ',
})

затем для админа

...
providers: [
  {
    provide: API_ROOT,
    useValue: 'http://server:port/admin-api',
  }
],
...

и где-то в коде

constructor(@Inject(API_ROOT) public readonly apiRoot: string) {}

Вы можете добавить запись для каждой сущности в методе entityResource HttpUrlGenerator.

Следовательно, в модуле User для объекта User у вас будет

      @Injectable()
export class UserDataService extends DefaultDataService<User> {

constructor(http: HttpClient, httpUrlGenerator: HttpUrlGenerator) {
        httpUrlGenerator.entityResource('User','http://server:port/user-api' );
        super('User', http, httpUrlGenerator);
    }
}

Как и в случае с ответом malc, я предлагаю вам переопределить конфигурацию DataService в каждом конкретном случае.

      export class UserDataService extends DefaultDataService<User> {
    constructor(http: HttpClient, httpUrlGenerator: HttpUrlGenerator, defaultConfig: DefaultDataServiceConfig) {
        super('User', http, httpUrlGenerator, { ...defaultConfig, root: 'http://server:port/user-api' })
    }
}

Это менее хитроумно, чем упреждающая установка knownHttpUrls для DefaultDataService.

Другие вопросы по тегам