4

假设我有两个 json 对象,一个是用户,一个是帐户,例如:

users = [
  {id: 1, account_id: 1},
  {id: 2, account_id: 2},
  {id: 3, account_id: 1}
]

accounts = [
  {id: 1, name: "administrator"},
  {id: 2, name: "moderator"}
]

所以我必须遍历所有用户数组,并为每个用户获取帐户信息。管理这些关系以在标记中访问它们的最佳方式是什么?我找到了以下解决方案:

方法 1:仅重复一个元素,以便仅过滤元素并使其在标记的该部分中可用

<div ng-repeat="user in users">
  <div ng-repeat="account in getAccountFromId(user.account_id)">
    <!-- now account is available in all this scope to access user.account.name -->
  </div>
</div>

方法二:改变后端返回信息的方式,带上每个用户的一个json,其中每个json和账户信息一起返回。但这会在每个 json 对象中重复很多信息。这也意味着由于角度而改变后端。

<div ng-repeat="user in users">
  <!-- with this approach I can access here user.account.name -->
</div>

有人可以告诉我这些方法是否正确吗?有没有更好的方法来管理角度对象关系?

非常感谢。

4

2 回答 2

3

如果您真的不喜欢改变来自服务器的数据形状的想法,另一种选择是将用户映射到 javascript 中的帐户。

app.controller("MyController", function($scope) {

  // Pretend that 'users' and 'accounts' here came from an xhr request
  var users = [
    {id: 1, account_id: 1},
    {id: 2, account_id: 2},
    {id: 3, account_id: 1}
  ]

  var accounts = [
    {id: 1, name: "administrator"},
    {id: 2, name: "moderator"}
  ]

  // Map accounts to users
  for(var i=0; i<users.length; i++) {
    for(var j=0; j<accounts.length; j++) {
      if (accounts[j].id === users[i].account_id) {
        users[i].account = accounts[j];
      }
    }
  }


});
于 2013-05-24T15:13:44.560 回答
0

我遇到了同样的问题,并决定执行数据映射不是前端工作。
因此,不要像返回 account_id 一样:

users = [
  {id: 1, account_id: 1},
  {id: 2, account_id: 2},
  {id: 3, account_id: 1}
]

我用“account_name”(或任何对我的等价物)扩展了模型
因此建议的输出

users = [
  {id: 1, account_id: 1, account_name: "administrator"},
  {id: 2, account_id: 2, account_name: "moderator"},
  {id: 3, account_id: 1, account_name: "administrator"}
]

它有点多余,但让您在 UI 中的生活更轻松,并且在服务器上花费不多。

于 2014-07-04T21:25:05.043 回答