当我搜索plunker时,它不会得到年龄的总和,而是会得到之前搜索过的年龄总和。
脚本
$scope.$watch('search',function(){
console.log($scope.filteredItems);
if($scope.filteredItems){
var x = $scope.filteredItems.length;
var total = 0;
for(var i = 0; i < x; i++){
total = total + parseInt($scope.filteredItems[i].age);
}
$scope.getTotal = total;
}
});
HTML
<tr dir-paginate="data in (filteredItems = (names | filter:search | orderBy:orderByColumn:!reverseSort | itemsPerPage:5))">
<td>{{data.id}}</td>
<td>{{data.name}}</td>
<td>{{data.age}}</td>
</tr>
我认为$watch
不是一个好的选择,他们的选择是$watch
吗?
答案 0 :(得分:1)
您不需要$watch
,一个简单的getTotal()
功能就足够了。
因此,只需将getTotal
属性更改为功能,然后移除$watch
。
在 HTML :
中执行此操作 <div>total age <b>{{getTotal()}}</b></div>
在控制器:
中$scope.getTotal = function() {
var total = 0;
if ($scope.filteredItems) {
var x = $scope.filteredItems.length;
for (var i = 0; i < x; i++) {
total = total + parseInt($scope.filteredItems[i].age);
}
}
return total;
}
修改
$ watch无法以正确的方式工作,因为$ watch优先于过滤器,并且在数据被过滤之前运行,因此您始终拥有以前的数据。