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 еще не поддерживает параметры.

https://github.com/ngrx/platform/issues/1934

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.

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