angular - 在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 中的分层实体?
谢谢
解决方案
请看一下ngrx-entity-relationship
:https ://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);
推荐阅读
- python - 如何证明布尔值是不可变的?
- python-3.x - 如何将 x-tick 标签更改为自定义标签,如图
- javascript - 使用 Django 为后端和前端设置单独的项目是一种好习惯吗?
- javascript - 在特定时间播放音频文件的 JavaScript 程序似乎不起作用
- asp.net - 为什么我在 heroku 上的网站会加载广告脚本?
- android - Android WebView 添加更多 URL 参数值
- reactjs - 我们是否有一个回调方法来完成 Reconciler 中的渲染?
- salesforce - 使用 Apex 从 Salesforce Opportunity 中提取所需数据
- javascript - 如何在谷歌搜索中制作菜单公司简介网站?如何编辑 sitemap.xml 来设置它?
- python - GUI tkinter 应用程序在发送多封电子邮件时冻结