实际示例:考虑展开/折叠列表。每个项目都会展开另一个列表。
export interface MainDomainList {
id: number
name: string;
}
export interface SubDomainList {
id: number
name: string;
}
export interface AppState {
mainDomainList: MainDomainList[];
subDomainList: SubDomainList[];
}
在用户界面上,列表应这样表示:
MainDomainList[1]
SubDomainList[] (entire list)
MainDomainList[2]
Another SubDomainList[] (entire list)
etc..
当用户单击MainDomain [n]时,将调用后端,该调用返回SubDomain []的列表。 两者之间没有任何联系。
看来,最复杂的部分是不是一次单击一次就一次性加载了SubDomains ,并且多个MainDomains可以同时打开 >如上例所示。另外,应该可以轻松地对subDomainList实体执行CRUD操作。
我尝试使用选择器,该选择器通过id从状态中选择一个项目,但是每次状态被覆盖时。
我最初的想法是创建一个单独的状态,在该状态下成功加载SubDomainList []之后,我可以通过分派“ ADD”操作来添加已加载的SubDomainList [],从而添加实体和单击的MainDomainList的ID当用户在列表中单击时,会在newList状态下获得以下内容:
exportt interface AppState {
mainDomainList: MainDomainList[];
subDomainList: SubDomainList[];
newList: NewList[];
}
{
mainDomainList : {
entities: {
md1: {
id: 'md1',
name: '1'
},
md2: {
id: 'md2',
name: '2'
}
}
},
subDomainList : {
entities : {
sd1 : {
id : 'sd1',
name: 'name1'
},
sd2 : {
id : 'sd2',
name: 'name2'
}
},
newList : {
entities : {
md1 : {
id : 'md1',
subDomainList: [{}, {}]
},
md2 : {
id : 'md2',
subDomainList: [{}, {}]
}
}
}
}
然后我将以某种方式获取所有newList实体,并在UI中将它们与MainDomainList [n] .id的ID相匹配
我的方法是正确的还是针对此问题的其他更好或更简单的解决方案?
我对这个主题还很陌生,但是尝试弄清楚如何使用ngrx / Entity来实现这一点我很头疼,尽管到目前为止,这是一个很普通的情况,但还是失败了。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以通过传递主域列表来编写带有参数的选择器
ref:ngrx parameter to select function 和https://blog.angularindepth.com/ngrx-parameterized-selector-e3f610529f8