2016-09-27 6 views
2

私はangularJSで作成されたテーブルを持っています。角度テーブルのフィルタ処理に関する問題td

HTML:私は、フィルタを適用したい<td data-title="'Current State'">

<div class="widget-content" ng-controller="getAllBenchersController"> 
    <table ng-table="talentPoolList" show-filter="true" 
      class="table table-striped table-bordered"> 
     <tr ng-repeat="employee in $data" | filter: testFilter"> 
      <td data-title="'#'">{{$index + 1}}</td> 
      <td data-title="'Employee ID'" sortable="'employee.employeeNo'" 
        filter="{ 'employee.employeeNo': 'text' }"> 
       {{employee.employee.employeeNo}} 
      </td> 
      <td data-title="'Current State'" sortable="'state.state'" filter="{ 'state.state': 'text' }" 
        ng-class="{ red: employee.state.state == 'Available', blue: employee.state.state == 'Blocked'}"> 
       {{employee.state.state}}    
      </td> 
     </tr> 
    </table> 
</div> 

。私は 'Available'と 'Blocked'の値を返す状態だけを表示したい。

私のコントローラは、次のとおりです。

myApp.controller('getAllBenchersController', ['$scope', 'employeeTalentPoolServices', 'dataTable', '$window', '$timeout', function ($scope, employeeTalentPoolServices, dataTable, $window, $timeout) { 
    employeeTalentPoolServices.getAllBenchers().then(function (result) { 
     $scope.data = result.data; 
$scope.testFilter = function (item) { 
      return (item.state.state.toLowerCase() === 'available' || item.state.state.toLowerCase() === 'blocked'); 
     } 
}); 

状態は、一般的に-'Available値を返す」、 'ブロックされた'、 '銘打たれた' と '' 拒否します。テーブルには「Available」と「Blocked」の状態しか表示されません。 小切手を持って、私が間違っていることを指摘してください。

答えて

2

状態が「利用可能」で「ブロック済み」のアイテムのみを表示する場合は、ng-repeatで角度フィルタを適用することをお勧めします。このようにして、ng-repeatはテーブルに必要な項目のみを計算します。

次の例のように、新しいフィルタを追加することができます:あなたのdiv要素があるべき

myApp.filter('filterState', 
    [], function() { 
     return function(items) { 
     return items.map(function(obj) { 
      if (obj.state === 'available' || obj.state === 'blocked') 
      return obj; 
     }); 
}); 

、後:上記のコード

<tr ng-repeat="employee in $data" | filter: filterState"> 
+1

ありがとうございます。出来た! – Phoenix

2
return (item.state.state.toLowerCase() === 'available' || item.state.state.toLowerCase() === 'blocked'); 

はブール値を返します、あなたが持っている場合にもここでは1つの値だけが考慮されます。 forループを作成し、値をチェックする必要があります。 下記参照コード:

var filteredOutput=[]; 
for(var i=0;i<item.length; i++){ 
if(item[i].state.state.toLowerCase() === 'available' || item[i].state.state.toLowerCase() === 'blocked') 
    { 
    filteredOutput.push(item[i]); 
    } 
} 
return filteredOutput; 
関連する問題