NGRX:当我们必须表示两个列表中的数据时的组合状态

时间:2019-01-04 12:08:44

标签: ngrx ngrx-store ngrx-entity

实际示例:考虑展开/折叠列表。每个项目都会展开另一个列表。

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来实现这一点我很头疼,尽管到目前为止,这是一个很普通的情况,但还是失败了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以通过传递主域列表来编写带有参数的选择器

  

ref:ngrx parameter to select function   和https://blog.angularindepth.com/ngrx-parameterized-selector-e3f610529f8