【问题标题】:Getting the sum of all values in object - ng-repeat获取对象中所有值的总和 - ng-repeat
【发布时间】:2016-12-03 03:24:02
【问题描述】:

我觉得我在这里缺少一些基本的东西,希望得到一些帮助。

我有一些看起来像这样的数据

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

还有一个 ng-repeat,它是 playerPoints 中的玩家,它显示了每个玩家点的列表。但我想要每个列表末尾的总数。这将所有特定的玩家积分加起来。在这种情况下,ted 将有 5,而 bill 将有 6。

我环顾四周,并没有真正发现似乎可行的东西,但这就是缺少的基本信息可能发挥作用的地方。

任何帮助都会很大。

【问题讨论】:

  • 这和ng-repeat有什么关系?您应该在视图之外的其他地方进行计算。
  • 发布一些 HTML 代码,看看你尝试了什么。
  • 我们不需要 HTML。我们需要一个控制器或服务函数来执行此操作并使用总分键/值对更新对象。

标签: angularjs angularjs-directive sum angularjs-ng-repeat


【解决方案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>

如果在服务中正确完成并存储为服务的属性,则视图将自动绑定数据,并在对象的数据更改时动态更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2018-12-08
    • 2014-05-23
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多