过滤角度表的问题td

时间:2016-09-27 08:00:33

标签: javascript angularjs angularjs-ng-repeat

我在angularJS中创建了一个表。

HTML:

<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>

<td data-title="'Current State'">我要应用过滤器。我想只显示返回值的状态&#39;可用&#39;并且&#39;被阻止&#39;。

我的控制器是:

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

州通常会返回值 - &#39;可用&#39;,&#39;阻止&#39;结算&#39;并且&#39;被拒绝&#39;。我希望桌子只显示状态 - &#39;可用&#39;并且&#39;被阻止&#39; 请检查并指出我做错了什么。

2 个答案:

答案 0 :(得分:2)

如果您只想显示状态为'available'和'blocked'的项目,我认为最好的选择是在ng-repeat中应用角度过滤器。通过这种方式,ng-repeat只计算表所需的项目。

您可以添加新过滤器,例如:

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

之后,你的div元素应该是:

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

答案 1 :(得分:2)

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

上面的代码返回一个布尔值,如果你有数组的值列表,这里只考虑一个值。 你应该写一个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;