2017-09-29 9 views
1

このplunkerで私はそれを検索しても年齢の合計は得られませんが、代わりに前回検索された年齢が表示されます。私は$watchは良い選択ではないと思い

スクリプト

$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よりも自分とにかく代替ですか?

答えて

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

EDIT

$ワットがあります$ watchはフィルタよりも優先され、データがフィルタされる前に実行されるため、chは正しく動作しません。したがって、常に以前のデータがあります。

+0

'$ scope.names'がajaxから来たのではないと思います –

+0

' $ scope.names'がHTMLにバインドされると 'nameのソースとは関係がありません'配列。 – anoop

+1

ああ、私の悪いその作業 –

関連する問題