2016-12-02 1 views
0

Я чувствую, что мне не хватает чего-то основного здесь, и мне будет очень нужна помощь.Получение суммы всех значений в объекте - ng-repeat

У меня есть данные, что выглядит как этот

"playerPoints"{ 
    "ted":{"military":3,"gold":2}, 
    "bill":{"military":2,"gold":4} 
} 

И в нг-повтор, который игрок и игроки показывает список всех игроков точек. Но я хочу, чтобы итог был в конце каждого списка. Это добавляет все конкретные очки игроков. В этом случае у ted было бы 5 и счет имел бы 6.

Я огляделся и на самом деле не сталкивался с чем-то, что похоже на то, что это сработает, но именно здесь может появиться недостающая базовая информация.

Любая помощь будет большой.

+1

Что это связано с 'ng-repeat'? Вы должны делать свои расчеты где-то иначе, чем в представлении. – isherwood

+0

опубликуйте некоторый код HTML, чтобы узнать, что вы пробовали. – rakemen

+0

Нам не нужен HTML. Нам нужна контрольная или служебная функция, которая делает это, и обновляет объект с помощью пары точек/значений общих точек. – isherwood

ответ

1

Вам нужна функция в вашем контроллере или службе, которая делает это заранее. Что-то вроде этого непроверенной например:

myService.data = { 
    "playerPoints": { 
     "ted": { 
      "military": 3, 
      "gold": 2 
     }, 
     "bill": { 
      "military": 2, 
      "gold": 4 
     } 
    } 
}; 

function sum(obj) { 
    var sum = 0; 
    for (var el in obj) { 
     if (obj.hasOwnProperty(el)) { 
      sum += parseFloat(obj[el]); 
     } 
    } 
    obj[el]["total"] = sum; 
} 

sum(myService.data.playerPoints); 

В контроллере вы присвоить переменной свойству службы:

ctrl.playerData = myService.data; 

Затем на ваш взгляд, вы можете просто выход, что значение ключа:

<div ng-repeat="player in ctrl.playerData"> 
    <span>{{player.total}}</span> 
    ... 
</div> 

Если сделано правильно в сервисе и сохранено как свойство службы, представление будет автоматически привязано к данным и будет динамически обновляться, если данные объекта будут изменены.