2017-03-20 1 views
0

다음 코드가 작동하지 않는 이유를 이해할 수 없습니다. 나는 다음과 같은 배열 예약이 그 코드 전에AngularJs - Ng 반복 배열

<div ng-repeat="r in reservations" ng-init="new = r.some_code"> 

<div ng-if="old == new"> 
    <p ng-init="sum = sum + r.cost">{{r.name}} - {{r.cost}}</p> 
</div> 

    <div ng-if="old != new"> 
     <p ng-init="old = new;">Total: {{sum}}</p> 
    </div> 

</div> 

: 나는 다른과 시간의 무리하지만 시도

15 - client 1 - 1000 
15 - client 2 - 1000 
15 - client 3 - 1000 
Total: 0 
Total: 0 

: 결과

reservations = [{name: client 1, some_code = 15, cost: 1000}, 
{name: client 1, some_code = 15, cost: 1000}, 
{name: client 2, some_code = 15, cost: 1000}, 
{name: client 3, some_code = 16, cost: 2000}, 
{name: client 4, some_code = 16, cost: 3000}, 
{name: client 5, some_code = 17, cost: 3000}] 

$scope.old = reservations[0].some_code; 
$scope.sum = 0; 

나는 무언가 같이 얻을 잘못된 결과. 내가 원하는 것은 각 예약을 표시하고 "some_code"이 변경되면 합계를 표시하는 것입니다.

어떻게하면됩니까?

참고 : 배열은 some_code 순으로 정렬됩니다.

+1

같은 이유를 대신 모델 계산에보기를 poluting의 컨트롤러에 for 루프에서 값을 계산하지 않습니다 보일 것

? –

답변

0

배열에는 두 개의 클라이언트 1이 있지만 관련성이 있는지는 확실하지 않습니다.

이 합계 ​​논리를 컨트롤러로 옮기는 것이 더 나을 것이라고 생각합니다. some_code를 키로 사용하여 합계를 값으로 사용하여 해시를 만들 수 있습니다. 그것은이

$scope.reservations = [{name: client 1, some_code = 15, cost: 1000}, 
 
{name: client 1, some_code = 15, cost: 1000}, 
 
{name: client 2, some_code = 15, cost: 1000}, 
 
{name: client 3, some_code = 16, cost: 2000}, 
 
{name: client 4, some_code = 16, cost: 3000}, 
 
{name: client 5, some_code = 17, cost: 3000}]; 
 

 
$scope.totals = {}; 
 
for (var i = 0; i < $scope.reservations.length; i++) { 
 
\t if (totals[$scope.reservations[i].some_code]) { 
 
\t \t totals[$scope.reservations[i].some_code] += $scope.reservations[i].cost; 
 
\t } else { 
 
\t \t totals[$scope.reservations[i].some_code] = $scope.reservations[i].cost; 
 
\t } 
 
}
<div ng-repeat="r in reservations" ng-init="new = r.some_code"> 
 
    <div> 
 
\t <p> {{r.name}} - {{r.cost}} </p> 
 
    </div> 
 

 
    <div> 
 
\t <p> Total: {{totals[r.some_code]}} 
 
    </div> 
 
</div>

+0

이것은 나를 도왔습니다. 감사. –

0

some_code로 예약을 렌더링 한 다음 선택적으로 세부 정보를 표시 할 수 있습니다. 고양이를 피하는 방법 : JSFiddle