更新AngularJs中的对象属性时出现问题

时间:2013-07-11 16:44:07

标签: angularjs

我正在AngularJs中构建我的第一个应用程序。

这是plunkr以及我到目前为止所做的事情。用户应该能够添加新网站并将它们分组。组也由用户制作。无论何时创建新组,它都可用于新网站。应用程序还应该做的是用新分配的网站更新组对象......这就是我失败的地方。

以下是json的样子:

{
"sites": [
  {
    "url": "http://sfdg",
    "id": 0,
    "groups": [
      {
        "name": "adsf",
        "id": 0
      }
    ]
  }
],
"groups": [
  {
    "name": "adsf",
    "id": 0,
    "sites": [//sites assigned
     ]
  }
]

}

在plunkr代码中,我使用了push但只添加了新的组...

请你指导我找到正确的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

为防止循环引用(网站对象引用引用网站对象的组对象等),我会将id存储到相关对象中。

首先,在创建新组时,向其中添加一个空的sites数组:

function createGroup(newGroup) {
  newGroup.sites = [];          // <-- add empty array of sites
  $scope.groups.push(newGroup);
  newGroup.id = groupIdSeq;
  groupMap[newGroup.id] = newGroup;
  groupIdSeq++;
  return newGroup;
}

然后,当您创建新网站时,请更新添加该网站的每个组:

  function createSite(newSite, groups) {
    $scope.sites.push(newSite);
    newSite.id = siteIdSeq;
    sitesMap[newSite.id] = newSite;

    // instead of storing the groups array, only store their id:
    newSite.groups = groups.map(function(group) { return group.id });

    // and add this new sites id to the groups' sites array.
    groups.forEach(function(group) {
      group.sites.push(newSite.id);
    });

    siteIdSeq++;
    return newSite;
  }

updated plunker here