Обновить итоги в повтор

0

Пожалуйста, взгляните на эту скрипку

То, что я пытаюсь сделать, это вычислить/обновить итоговые значения для каждого столбца внутри вложенного 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-модель

  2. Сумма не работает. Но я думаю, мне нужно решить проблему №1, прежде чем я смогу заставить ее работать.

Пожалуйста помоги. Благодарю.

  • 0
    На первый взгляд заметили некоторые ошибки: 1. Вы назначили имя модуля для ng-app? 2. Вы пропускаете > в своей строке параграфа
  • 0
    Lihsing, спасибо за указание на них. Тем не менее, я не думаю, что они имеют значение. Я исправил их обоих, и проблемы все еще там.
Показать ещё 3 комментария
Теги:
angular-ngmodel
ng-repeat

1 ответ

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). Одним из способов его устранения было бы заставить его принять идентификатор вместо этого

$scope.sumQty = function(id) {
  var total=0;
  angular.forEach($scope.qtys , function(item){
      if(item.bookId == id) {
        total+= parseInt(item.qty);
      }
  });
  return total;
}     
  • 0
    Ах, я не могу поверить, что я застрял в цикле forEach. Конечно, в исходном коде оператор return просто выйдет из цикла forEach, но не из функции getIndex. Глупый я! Вы правы, функция sumQty была незавершенной, потому что я все еще пытался выяснить первую проблему. Огромное спасибо за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню