【问题标题】:AngularJS - Nested ng-repeat using two objectsAngularJS - 使用两个对象嵌套 ng-repeat
【发布时间】:2016-07-02 07:21:07
【问题描述】:

控制器:

$scope.init = function(team){
    $http.get("/getLeaderByTeamID/"+team.id)
    .success(function (data, status, headers, config) {
        // this is the object that I need to list in the table
        $scope.leader = data;
    })
    .error(function (data, status, header, config) {
        $log.error("Error!");
    });

}

表中的 data-ng-repeat 指令:

<table>
<thead>
    <tr>
        <th>Team</th>
        <th>Leader</th>
    </tr>
</thead>
<tbody>
     <tr data-ng-repeat="team in teams" data-ng-init="init(team)">
        <td>{{team.name}}</td>
        <td data-ng-repeat="l in leader">{{l.name}}</td>
     </tr>
</tbody>    

逻辑如下:

  • 列出每个团队后,init() 函数会将对象发送到控制器。
  • 另一方面,init() 函数将与 ID 团队进行查询,以获取其各自的领导者。
  • 该函数将返回一个对象,第二个 ng-repeat 指令会将其列在其各自的团队对象中。

但正如我所展示的,该列表是错误的,因为每个团队都列出了一个相同的对象。

我想在 init() 函数中为每个对象创建一个数组,但我不知道如何连接每个对象以创建一个数组。

有什么建议吗?

【问题讨论】:

  • 有什么方法可以从您的数据库中以正确的形式获取数据?
  • 关系不能被修改,但正如我之前所说的......可以在init()函数中创建一个包含每个对象的数组吗?

标签: javascript angularjs


【解决方案1】:

我认为您只是在每个请求中更新 $scope.leader 值,所以最后 $scope.leader 对所有团队都有相同的值。试试这个。

$scope.init = function(teamId){
$http.get("/getLeaderByTeamID/"+teamId)
.success(function (data, status, headers, config) {
    // this is the object that I need to list in the table
    $scope.leader[teamId] = data;
})
.error(function (data, status, header, config) {
    $log.error("Error!");
});



<table>
<thead>
    <tr>
        <th>Team</th>
        <th>Leader</th>
    </tr>
</thead>
<tbody>
     <tr data-ng-repeat="team in teams" data-ng-init="init(team.id)">
        <td>{{team.name}}</td>
        <td data-ng-repeat="l in leader[team.id]">{{l.name}}</td>
     </tr>
</tbody>  

或者您可以在第二个 ng-repeat 中使用函数返回领导者数组,例如:

<td data-ng-repeat="l in getLeader(team.id)">{{l.name}}</td>

【讨论】:

  • 是的,绝对是我的第一个想法。但是,如果数据库中存在关系,无论它是否设置为外键/主键,您都可以随时加入这些列。似乎如果您使用的是 SQL,您肯定可以从数据库中正确获取它。
  • 如果可以的话,我更喜欢从第一个初始请求中获取所有数据,然后对完整数据使用 ng-repeat
  • @SlaimanAris 看起来不错,但在 $http 服务中出现错误“无法读取未定义的属性 'id'”。似乎“team.id”参数错误。
  • 对不起我的问题,你在 ng-repeat 中不需要 (key,value) 刚刚更新了我的答案以使用 team.id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 2014-03-13
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多