使用ng-repeat用数组中的数据填充表行

时间:2016-03-25 19:36:36

标签: javascript angularjs

我有一个名为current_item.get_user_history()的JS函数,它通过make和API调用返回一个数组,它看起来就像这样:

things[0]:
 thing_id: 5
 user_id: 23
 paddle_no: 1234
 item_id: 893
 price: 5000

things[1]:
 thing_id: 4
 user_id: 67
 paddle_no: 6743
 item_id: 893
 price: 4500

... and so on

我希望能够从此数组中获取数据,以使用ng-repeat填充表格。

<div class="bid_history">
      <table>
        <tr>
          <th>
            Column 1
          </th>
          <th>
            Column 2
          </th>
          <th>
            Column 3
          </th>
        </tr>
        <tr ng-repeat="thing in current_item.get_user_history() track by thing.id">
        {{thing.user_id}} {{thing.price}}
        </tr>

      </table>
  </div>

由于某些原因,没有任何东西被渲染,并且它似乎做了很多重复,因为我在chrome控制台中得到了无法阻挡的错误数量。感谢任何帮助,以准确解释如何使用ng-repeat

3 个答案:

答案 0 :(得分:2)

您无法在$digest()中使用触发$http的功能(例如$timeoutng-repeat)。它会导致无限$digest()循环。

有解释:

https://github.com/angular/angular.js/issues/705angular Infinite $digest Loop in ng-repeat

之前我犯了同样的错误:)

Infinite loop when ng-repeat/ng-class calls a function which calls $http

您必须先保存current_item.get_user_history()数据,然后使用ng-repeat来调用数据。

scope.things= urrent_item.get_user_history();

<tr ng-repeat="thing in things track by thing.id">

答案 1 :(得分:0)

简答 不要在ngRepeat上为退货项目调用函数。将项数组存储在作用域中的属性上。

$scope.user_history = current_item.get_user_history();

如果您确实需要这样做,可以使用以下方法之一进行修复:

  1. 不要在每次current_item.get_user_history()来电时创建新对象。
  2. 如果您需要创建新对象,可以为它们添加hashKey方法。有关示例,请参阅this topic
  3. 中等答案 您通常不希望在ng-repeat中迭代函数。原因是current_item.get_user_history()返回带有新对象的数组。此对象没有hashKey,并且在ngRepeat缓存中不存在。因此,每个ngRepeat上的watch.get会为{{thing.id}}的新监视为其创建新范围。第一个watch.get()上的此手表有watch.last == initWatchVal。那么watch.get() != watch.last。那么$digest开始一个新的遍历。然后ngRepeat使用新手表创建新范围,依此类推。然后在10次遍历后,您将收到错误。

    长答案 查看this post,了解其工作原理。

答案 2 :(得分:0)

问题是摘要周期正在返回一个承诺,我不得不把它变成一个对象。

我原本是这样做的:

my_api.get_user_history(self.id);

并且必须将其添加到该行:

.then(function(data){self.user_history = data});

部分问题也是@Ealon所提到的。我还决定将它存储在局部变量中,而不是返回函数的结果。我发布了这个答案,因为上面的每个答案都是有效的部分,我需要考虑并整理起来解决我的问题。谢谢大家的帮助和指导。