Filtered Dropdown(使用select)累计总计(ng-repeat)

时间:2014-09-01 02:43:43

标签: angularjs angularjs-ng-repeat angular-ngmodel

希望有人能够对我的问题有所了解。我有一个AgularJS下拉列表,显示了许多用户。根据您选择的用户,它将显示一些由用户ID引用的数据。一切都很棒!没问题。

我想尝试获取这些结果并对其进行一些数学运算。在下面的示例中,当选择用户时,它将显示一周中的某一天和“得分”。我想尝试在每一行的末尾累积分数。

FIDDLE:http://jsfiddle.net/bfoyhycy/1

    <tr ng-repeat="eachItem in Data |filter: { id: selectedOption.id }">
        <td>{{eachItem.day}}</td>
        <td>{{eachItem.score}}</td>
        <td> <!---- NO IDEA WHAT TO DO HERE ----> </td>
    </tr>

我以为我可以引用数据并使用它的索引,但这不起作用,因为我根据'id'过滤它。因此,累计总数对于第一个用户是正确的,但对其余用户不正确(如果您选择用户“Frank”,则可以看到这一点。)

FIDDLE:http://jsfiddle.net/bfoyhycy/2/

    <tr ng-repeat="eachItem in Data |filter: { id: selectedOption.id }">
        <td>{{eachItem.day}}</td>
        <td>{{eachItem.score}}</td>
        <td>{{Data[$index-1].score}}</td>
    </tr>

我想知道在ng-repeat期间是否有办法获取前一行值?我最初认为你可以做{{eachItem [$ index-1] .score}}但显然你做不到。如果有人有任何想法如何解决这个问题,将非常感谢!如果我需要提供更多信息,请告诉我。希望这一切都有意义!

谢谢! Ť

1 个答案:

答案 0 :(得分:1)

您可以将过滤后的项目分配给名为filteredData的变量,如下所示......

<tr ng-repeat="eachItem in filteredData = (Data |filter: { id: selectedOption.id })">

现在您可以正确使用$index ...

<td>{{ filteredData[$index-1].score }}</td>

要获得真正的跑步总数,您实际上需要做更多。一种方法是使用ngInit,虽然我不得不说它在这一点上变得相当hacky,但它有效......

    <tr ng-repeat="eachItem in filteredData = (Data |filter: { id: selectedOption.id })" 
      ng-init="eachItem.runningTotal = filteredData[$index-1].runningTotal + eachItem.score">
        <td>{{eachItem.day}}</td>
        <td>{{eachItem.score}}</td>
        <td>{{eachItem.score + filteredData[$index-1].runningTotal}}</td>
    </tr>

Live Demo

也许更好的解决方案是创建一个自定义过滤器,输出带有预先计算的运行总计的过滤数组。