访问ng-repeat中的另一个模型

时间:2014-07-24 01:14:47

标签: json angularjs model-view-controller

在我看来,这应该是非常明显的,但我在任何地方都没有找到一个例子。

我有两个模型,会话和用户:

$scope.sessions = 
[{
    "sessionId":"1",
    "userId":"12345",
    "date": "17/07/2014",
    "test_name":"2014beta",
    "status": "new",
    "assigned_to":""
}]

$scope.users = 
[{
    "userId":"12345",
    "name":"Frank Tester",
    "dob": "17/07/1967",
    "eyes":"blue"
}]

会话属于用户,因此在数据库中,用户ID保存在会话模型中(上面的过度简化模型)。

在会话列表中,我想要包含用户名和其他用户详细信息,这两者都可以通过用户模型访问。

我在范围内同时提供了用户和会话。我使用ng-repeat列出所有会话(并显示session.namesession.time等内容),如何通过它的ID访问其他模型的用户名?即。我认为我应该可以访问session.user.name

我需要在几个不同的地方执行此操作,并且需要访问不同位的交叉引用数据 - 是否有一种简单的方法可以在模板中执行此操作,还是需要构建服务为了这?指令?过滤器?

1 个答案:

答案 0 :(得分:0)

您可以在会话ng-repeat中添加另一个ng-repeat,并通过session.userId

对其进行过滤

请参阅演示:http://plnkr.co/edit/BOITOEEYDM9tFH3zbMIW

<body ng-controller="MainCtrl">
  <p>Hello {{name}}!</p>

  <ul>
    <li ng-repeat="session in sessions">
      {{session.date}}
      <ul>
        <li ng-repeat="user  in users | filter: session.userId ">
          {{user.name}}
        </li>
      </ul>
    </li>
  </ul>
</body>

JS:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  $scope.sessions = 
[{
    "sessionId":"1",
    "userId":"12345",
    "date": "17/07/2014",
    "test_name":"2014beta",
    "status": "new",
    "assigned_to":""
}]

$scope.users = 
[{
    "userId":"12345",
    "name":"Frank Tester",
    "dob": "17/07/1967",
    "eyes":"blue"
}]
});