Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 以角度管理相关对象的最佳方法?_Angularjs_Relational Database - Fatal编程技术网

Angularjs 以角度管理相关对象的最佳方法?

Angularjs 以角度管理相关对象的最佳方法?,angularjs,relational-database,Angularjs,Relational Database,假设我有两个json对象,一个是用户,一个是帐户,类似于: 用户=[ {id:1,帐户\ id:1}, {id:2,帐户\ id:2}, {id:3,帐户\ id:1} ] 账户=[ {id:1,名称:“管理员”}, {id:2,姓名:“主持人”} ] 因此,我必须循环访问所有用户数组,并为每个用户获取帐户信息。管理这些关系以便在标记中访问它们的最佳方法是什么?我找到了以下解决方案: 方法1:只重复一个元素,这样只需过滤元素并使其在标记的该部分可用 <div ng-repeat="use

假设我有两个json对象,一个是用户,一个是帐户,类似于:

用户=[
{id:1,帐户\ id:1},
{id:2,帐户\ id:2},
{id:3,帐户\ id:1}
]
账户=[
{id:1,名称:“管理员”},
{id:2,姓名:“主持人”}
]
因此,我必须循环访问所有用户数组,并为每个用户获取帐户信息。管理这些关系以便在标记中访问它们的最佳方法是什么?我找到了以下解决方案:

方法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>

方法2:改变从后端返回信息的方式,为每个用户带来一个json,其中每个json都返回帐户信息。但这将在每个json对象中重复大量信息。这也意味着由于角度的原因而改变后端

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

有人能告诉我这些方法是否正确吗?有没有更好的方法来管理angular中的对象关系


非常感谢。

如果您真的不喜欢更改来自服务器的数据的形状,另一个选择是只将用户映射到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];
      }
    }
  }


});
app.controller(“MyController”,函数($scope){
//假设此处的“用户”和“帐户”来自xhr请求
变量用户=[
{id:1,帐户\ id:1},
{id:2,帐户\ id:2},
{id:3,帐户\ id:1}
]
风险值账户=[
{id:1,名称:“管理员”},
{id:2,姓名:“主持人”}
]
//将帐户映射到用户

对于(var i=0;i我面临同样的问题,并决定执行数据映射不是前端工作。
因此,与其返回帐户,不如像:

users = [
  {id: 1, account_id: 1},
  {id: 2, account_id: 2},
  {id: 3, account_id: 1}
]
我用“帐户名”(或我的任何等价物)扩展了模型
因此建议的输出

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"}
]

它有点多余,但在用户界面上使您的生活更轻松,在服务器上花费也不多。

我明白了,谢谢。到目前为止,我看到的更坚持角度的方法是改变来自服务器的数据的形状(如您所述)然而,这会重复每个用户的帐户,这对我来说似乎没有多大意义,我认为角度应该用某种东西来避免这种信息必须重复的情况,或者可能是我错了。