【问题标题】:How to sort entities by any property in ngrx如何按ngrx中的任何属性对实体进行排序
【发布时间】:2021-10-27 17:26:04
【问题描述】:

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

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
  }
});

【问题讨论】:

    标签: angular typescript ngrx ngrx-entity


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

    只是为了添加我的 2 美分并详细说明。

    根据我的理解,适合您的情况的最佳做法,因为您的排序似乎与您的应用的“视图”更相关,而不是实体的实际状态,因此最好在选择器中对其进行排序。因为您的实体仅用于保存与实体相关的信息,而不是“查看”它的方式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      相关资源
      最近更新 更多