如何按 ngrx 中的任何 属性 对实体进行排序

How to sort entities by any property in ngrx

在文档中我找到了一个使用 sortComparer 的简单示例,问题是我们只按名称排序,如果我想按不同的属性进行排序,我必须以某种方式提供有关键的信息 / 属性。我知道我可以在每个实体中对信息进行排序,但我不想复制它……我更喜欢从主状态获取它……我能以某种方式注入将提供 [=13= 的服务吗? ]状态从主状态?

reducer.ts

export function advancedSorting(a, b): any {
  const sortState = { key: 'name', order: 1 }; // temporary mock - get sort state from main store
  const itemA = a[sortState.key];
  const itemB = b[sortState.key];
  return itemA < itemB
    ? -1 * sortState.order
    : itemA > itemB
    ? sortState.order
    : 0;
}

export const adapter: EntityAdapter<ProductDetails> =
  createEntityAdapter<ProductDetails>({
    sortComparer: advancedSorting
  });

export const initialState: ProductsState = adapter.getInitialState({
  productType: null,
  productTags: [],
  sort: {
    key: 'name',
    order: 1
  }
});

Reducers 是纯粹的,@ngrx/entity 也是如此。 您也不能从一个减速器中引用另一个减速器(状态)。

相反,我建议使用一个选择器来检索两个状态切片并在选择器中对集合进行排序。

我无法对@timdeschryver 的回答添加评论,但我同意他的看法。

只是加上我的 2 美分并详细说明。

根据我的理解,这是适合您情况的最佳做法,因为您的排序似乎与应用程序的 'view' 相关,而不是实体的实际状态,因此最好将其排序为选择器。因为您的实体只是为了保存与实体相关的信息,而不是它是如何 'viewed'。

就我个人而言,有一半时间我不需要对我的实体进行排序,因为我在选择器中进行了所有排序,因为它可能与应用程序中某处或其他状态的分页器有关。