角度搜索$观看延迟

时间:2017-09-29 03:18:09

标签: angularjs

当我搜索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吗?

1 个答案:

答案 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;
  }

这是Fixed plunker

修改

$ watch无法以正确的方式工作,因为$ watch优先于过滤器,并且在数据被过滤之前运行,因此您始终拥有以前的数据。