ngrx/data: лучший способ иметь несколько корней api?
Мне нужно было бы настроить таргетинг на разные корни конечных точек api из разных модулей angular.
Например
- http://server:port/user-api из пользовательского модуля
- http://server:port/admin-api из модуля администратора
- http://server:port/checkout-api из модуля Cart и так далее.
Из того, что я вижу, корень 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.