Пожалуйста, взгляните на эту скрипку
То, что я пытаюсь сделать, это вычислить/обновить итоговые значения для каждого столбца внутри вложенного 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>
У меня есть две проблемы, которые я пытаюсь решить:
Теперь поля ввода отображают правильные значения из моего массива. Я пытаюсь использовать ng-init для получения индекса из массива сначала на основе custId и bookId, в которые я передаю:
<p ng-init="index=getIndex(book.id, cust.id)"</p>
<input ng-model="qtys[index].qty">
Наверное, я не уверен, как правильно привязать ng-модель
Пожалуйста помоги. Благодарю.
Вы получили это почти правильно. Проблема заключается в методе 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;
}
>
в своей строке параграфа