NGRX数据entityResourceUrl取决于其他实体。动态网址?

时间:2019-11-12 06:39:55

标签: angular ngrx angular-ngrx-data

通常,当我想指定实体的网址时,我会为其指定一个特定的网址,例如 serverURL / heroes 。 但是现在我想使用属于其他实体的实体。例如,假设我要使用英雄武器。我的剑的http网址类似于: serverURL / heroes / heroID /武器。因此,可以说我需要添加新剑,我唯一的选择是将其添加到特定英雄中,因此我需要知道heroesID和剑信息以执行以下操作:HTTP POST http.post('serverURL/heroes/heroID/weapons', swordObject);

当前,当我仅在DefaultDataServiceConfig的EntityHttpResourceUrls中添加英雄URL时。您可以看到example on stackblitz。转到app-> store-> entity-> entity-store.module.ts。那就是我通常指定网址的地方。

如何处理我的案件?如何为子实体提供动态网址?

3 个答案:

答案 0 :(得分: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`);
  }
}

答案 1 :(得分:0)

您需要使用NGRX中的router store

在商店中,您具有以下选择器:

selectQueryParamsselectRouteParamsselectRouteDataselectUrl

因此,您可以轻松满足构建不同路径的所有需求。

答案 2 :(得分:0)

我最终使用了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。