2

使用 AngularJS ng-repeat,我正在过滤人员列表。结果人员的列表被传递给一个变量filtered。我想显示filtered.length.

当我调整过滤器时,过滤器可以正常工作并显示正确的人,但是有多少人(即filtered.length)的计数有时不会更新。

这似乎很奇怪:

    <br><br>
    People Selected: {{filtered.length}}<br><br>
    Cost: {{filtered.length*0.01 | currency}}
</div>
<div class="span10">
    <br><br>
    <table class="people">
        <tr ng-repeat="person in (filtered = (data.people | filter:okay))">
            <td>{{person.age}} - {{person.gender}} - {{person.tags}}</td>
        </tr>
    </table>
</div>

但是,如果我filtered.length在页面底部显示 之后ng-repeat,它似乎可以工作。如果我把它放在顶部,它只有 80% 的时间有效。

4

2 回答 2

1

可以将过滤器方法移动到控制器,以便您可以更新长度变量:

app.controller('MainCtrl', function($scope) {

  var items=[
    {name:'Jim', ok: true},
    {name:'Sue', ok: true},
    {name:'Bob', ok: false},

    ];

    $scope.$watch('filter.value',function(){     
      $scope.items=items.filter(function(item){
         return item[$scope.filter.property]==$scope.filter.value
      })
      $scope.num_items=$scope.items.length;

    });
    $scope.filter={value:true, property: 'ok'}
});

Plunker 演示

于 2013-03-24T17:43:45.540 回答
0

我找到了一个解决方案,不幸的是需要多次运行过滤器:

    People Selected: {{(data.people | filter:okay).length}}<br><br>
    Cost: {{(data.people | filter:okay).length*0.02|currency}}

我的小数据集没问题,但如果你能在我的原始问题中看到错误,请告诉我。

于 2013-03-24T10:34:57.123 回答