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

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

Например

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

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

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

Спасибо


person Mauro Cioni    schedule 20.12.2019    source источник


Ответы (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) {}
person satanTime    schedule 09.04.2020

Вы можете добавить запись для каждой сущности в методе 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);
    }
}
person malc    schedule 12.01.2021

Как и в случае с ответом 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.

person Toptotor    schedule 08.04.2021