以ng-repeat更新总计

时间:2015-09-26 14:39:09

标签: angularjs ng-repeat angular-ngmodel

请查看此fiddle

我要做的是计算/更新嵌套ng-repeat中每列的总数:

 <tr ng-repeat="cust in customers">
     <td>{{cust.name}}</td>
     <td ng-repeat="book in books">
         <p ng-init="index=getIndex(book.id, cust.id)"></p>
         <input ng-model="qtys[index].qty">
     </td>
 </tr>
 <tr>
     <td>Total</td>
     <td ng-repeat="book in books">
         <input type=text value="{{sumQty(book.id)}}">
     </td>
 </tr>

我有两个问题需要解决:

  1. 输入框现在显示我的数组中的正确值。我正在尝试使用ng-init来首先根据我传入的custId和bookId从数组中获取索引:

     <p ng-init="index=getIndex(book.id, cust.id)"</p>
     <input ng-model="qtys[index].qty">
    

    我想我不确定如何正确绑定ng-model

  2. 总计不起作用。但我想我需要先解决#1问题,然后再开始工作。
  3. 请帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

你几乎是对的。问题出在你的getIndex方法中 - 你在那里做的返回不会从getIndex返回,它只是退出传递给forEach的函数。如果您这样修改它,它将起作用

$scope.getIndex = function(bookId, custId) {
    var index = null;
    angular.forEach($scope.qtys , function(item, idx) {
        if (item.bookId == bookId && item.custId == custId) {
            index = idx;
        };
    });
    return index;
};

scope.sumQty似乎未完成(它将列表作为参数,但您将id传递给它)。修复它的一种方法是让它接受id而不是

$scope.sumQty = function(id) {
  var total=0;
  angular.forEach($scope.qtys , function(item){
      if(item.bookId == id) {
        total+= parseInt(item.qty);
      }
  });
  return total;
}