Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS从ng repeat更新筛选器时未更新筛选结果_Angularjs_Angularjs Ng Repeat_Angular Filters - Fatal编程技术网

AngularJS从ng repeat更新筛选器时未更新筛选结果

AngularJS从ng repeat更新筛选器时未更新筛选结果,angularjs,angularjs-ng-repeat,angular-filters,Angularjs,Angularjs Ng Repeat,Angular Filters,使用AngularJSng repeat,我正在筛选一个人员列表。生成的人员列表被传递给一个变量过滤后的。我想显示已过滤的.length 当我调整过滤器时,过滤器工作正常,并显示正确的人员,但人数计数(即过滤的.length)有时不会更新 这似乎很奇怪: <br><br> People Selected: {{filtered.length}}<br><br> Cost: {{filtered.length*0.01 | c

使用AngularJS
ng repeat
,我正在筛选一个人员列表。生成的人员列表被传递给一个变量
过滤后的
。我想显示
已过滤的.length

当我调整过滤器时,过滤器工作正常,并显示正确的人员,但人数计数(即
过滤的.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}

成本:{filtered.length*0.01 | currency}

{{person.age}-{{person.gender}-{{person.tags}

然而,如果我在页面底部显示
filtered.length
,在
ng repeat
之后,它就可以工作了。如果我把它放在顶部,它只在80%的时间内工作。

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

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

成本:{(data.people | filter:ok).length*0.02 | currency}

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

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

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'}
});

尝试将筛选器作为函数移动到控制器,并可以使用结果数组的长度更新范围变量