NGRX数据实体ResourceUrl取决于其他实体.动态url



通常,当我想指定实体的url时,我会为它指定一个特定的url,比如serverURL/hoers。但现在我有一个情况,我想使用属于其他实体的实体。比如说我想使用英雄的武器。我的剑的http URL看起来像:serverURL/heroID/harmes。所以,假设我需要添加新的剑,我唯一的选择是将其添加到特定的英雄中,所以我需要知道英雄ID和剑的信息才能执行以下操作:HTTP POSThttp.post('serverURL/heroes/heroID/weapons', swordObject);

目前,我只是在DefaultDataServiceConfig中的entityHttpResourceUrls中添加英雄url。你可以在stackblitz上看到这个例子。转到app->store->entity->entity-store.module.ts。这是我通常指定url的地方。

我该如何处理我的案件?如何拥有子实体的动态url

更新

根据我在本期文章中的发现,ngrx数据还不支持参数。

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

在我的案例中,我创建了服务:

@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的路由器存储。

有了商店,你就有了这样的选择器:

selectQueryParamsselectRouteParamsselectRouteDataselectUrl

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

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

最新更新