Angular 按控制器内的文本过滤 table

Angular filter table by text inside controller

我想在我的 controller 中创建一个 filter,其运行方式如下:

<tr ng-repeat = "obj in filterd = (allObjs | filter:{field: fieldFilter} | filter {field2: filed2Filter})"> //more filters...

所以它将通过 fieldFilterfield2Filter 过滤 allObjs 数组,在我的控制器中,我不知道如何使用 filter 文档来完成它:

$scope.filterTable = $filter('filter')(fieldFilter)(field2ilter); //doesn't work

谢谢。

$filter可以带一个对象。

For example {name:"M", phone:"1"} predicate will return an array of items which have property name containing "M" and property phone containing "1".

在控制器中使用 $filter 的示例:

angular.module('filters', [])
.controller('demo', function($scope, $filter) {
  $scope.example1 = [{
    name: 'C#',
    type: 'static'
  }, {
    name: 'PHP',
    type: 'dynamic'
  }, {
    name: 'Go',
    type: 'static'
  }, {
    name: 'JavaScript',
    type: 'dynamic'
  }, {
    name: 'Rust',
    type: 'static'
  }];

  $scope.filteredLanguages = $filter('filter')($scope.example1, {
    name: 'C#',
    type: 'static'
  });
})
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-lg-6 col-lg-offset-3">
        <div ng-app="filters">
          <div ng-controller="demo">
            <div class="panel panel-default">
              <div class="panel-body">
                <h4 class="text-center">AngularJS Filter</h4>
                <p><strong>Original:</strong>
                </p>
                <ul class="list">
                  <li ng-repeat="lang in example1">{{lang.name}}</li>
                </ul>
                <p><strong>Languages Filtered:</strong>
                </p>
                <ul class="list">
                  <li ng-repeat="lang in filteredLanguages">{{lang.name}}</li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>

</html>

此外,仅过滤 returns 一个数组,因此您可以使用每个 属性 键调用过滤器两次,而不是上面的方法,请参阅此 .

var filtered;
filtered = $filter('filter')($scope.list, {name: $scope.filterParams.nameSearch});
filtered = $filter('orderBy')(filtered, $scope.filterParams.order);

类似于在标记中级联过滤器的方式,只需在控制器中级联它们:

$scope.filterTable = $filter('filter')(
    $filter('filter')(allObjs, fieldFilter) //results of first filter is source for 2nd one
    , field2Filter);