NGRX data entityResourceUrl в зависимости от другого объекта. динамические URL-адреса?
Обычно, когда я хочу указать URL-адрес объекта, у меня есть один конкретный URL-адрес для него, например serverURL / heroes. Но теперь у меня есть случай, когда я хочу использовать объект, принадлежащий другому объекту. Например, допустим, я хочу использовать оружие героев. Мои http-адреса мечей выглядят примерно так: serverURL / heroes / heroID / weapon. Итак, допустим, мне нужно добавить новый меч, мой единственный вариант - добавить его к определенному герою, поэтому мне нужно знать heroesID и информацию о мече, чтобы сделать что-то вроде: HTTP POSThttp.post('serverURL/heroes/heroID/weapons', swordObject);
В настоящее время, когда я просто добавляю URL-адрес героев в entityHttpResourceUrls в DefaultDataServiceConfig. Вы можете увидеть пример на stackblitz. перейдите в app->store->entity-> entity-store.module.ts. вот где я обычно указываю URL.
Как мне подойти к моему делу? как я могу получить динамические URL-адреса для дочерних объектов?
Обновить
из того, что я обнаружил в этом выпуске, ngrx-data еще не поддерживает параметры.
2 ответа
В моем случае я создал сервис:
@Injectable()
export class OrganizationDataService extends DefaultDataService<Organization> {
constructor(http: HttpClient, httpUrlGenerator: DefaultHttpUrlGenerator, logger: Logger) {
super('Organization', http, httpUrlGenerator);
}
getAll(): Observable<Organization[]> {
console.log('getAll called');
// custom call to api correct variant:
return this.execute('GET', `${environment.apiUrl}org/${someId}/apps`)
// custom call to api also worked variant:
// return this.http.get<Organization[]>(`${environment.apiUrl}org/${someId}/apps`);
}
}
Вам нужно использовать магазин роутера от NGRX.
В магазине у вас есть следующие селекторы:
selectQueryParams
, selectRouteParams
, selectRouteData
и selectUrl
.
Таким образом, вы можете легко получить все необходимое для построения различных путей.
В итоге я использовал функцию getWithQuery:
getWithQuery(params: QueryParams): Observable<Weapon[]> {
const hero= params['heroId'] || '';
const pageIndex = params['pageIndex'] || '0';
const pageSize = params['pageSize'] || '25';
const apiUrl = `api/hero/${heroId}/weapons/?page=${pageIndex}&size=${pageSize}`
return this.http.get(apiUrl)
}
вместо использования getAll.