首页 > 解决方案 > 在ngrx EntityState中处理分层数据

问题描述

我有一个数据库,其中包含一个具有 orgref、parentorgref、name 属性的组织表。

{ orgref: 1, name: "Level 0 org" }
{ orgref: 2, parentorgref: 1, name: "Level 1 org A" }
{ orgref: 3, parentorgref: 1, name: "Level 1 org B" }
{ orgref: 4, parentorgref: 3, name: "Level 2 org" }

我将这些组织存储在 rxjs 实体状态中。

在我的应用程序的大多数地方,我想分层使用这些(数据树等),所以希望它们排列为:

{
  orgref: 1,
  name: "Level 0 org",
  children: [{
    orgref: 2,
    parentorgref: 1,
    name: "Level 1 org A"
  }, {
    orgref: 3,
    parentorgref: 1,
    name: "Level 1 org B",
    children: [{
      orgref: 4,
      parentorgref: 3,
      name: "Level 2 org",
    }]
  }]
}

当然,如果我在children通过以下方式加载组织时将子组织添加到集合中

{
  ...org,
  children: getChildrenRecursive()
}

然后对实体的引用被破坏 - 也就是说,如果我使用 orgref=3 编辑实体,它不会更新层次结构中的组织,因为它是对象的副本,而不是对它的引用。

是否有一个公认的解决方案来处理 ngrx EntityState 中的分层实体?

谢谢

标签: angularngrxngrx-entity

解决方案


请看一下ngrx-entity-relationshiphttps ://www.npmjs.com/package/ngrx-entity-relationship 。

它可以帮助您解决问题。

你的选择器看起来像:

const select entityWithChildren = rootEntity(
  selectYourEntityState, // <- replace with the selector of the entity state.
  childrenEntity(
    selectYourEntityState, // <- replace with the selector of the entity state.
    'parentorgref',
    'children',
  ),
);

然后在组件/服务中:

store.select(entityWithChildren, 1);

推荐阅读