Таблица угловых фильтров по тексту внутри контроллера

0

Я хочу создать filter внутри моего controller который будет работать как:

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

поэтому он будет фильтровать массив allObjs по fieldFilter, field2Filter, внутри моего контроллера, я не понял, как это сделать, используя documnation фильтра:

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

Благодарю.

Теги:
angular-filters

2 ответа

2
Лучший ответ

$ filter может взять объект.

Например, предикат {name: "M", phone: "1"} возвращает массив элементов, у которых есть имя свойства, содержащее "M" и телефон свойств, содержащий "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>

Кроме того, фильтр просто возвращает массив, поэтому вместо вышесказанного вы можете дважды вызвать фильтр с каждым ключом свойства, см. Этот ответ.

var filtered;
filtered = $filter('filter')($scope.list, {name: $scope.filterParams.nameSearch});
filtered = $filter('orderBy')(filtered, $scope.filterParams.order);
  • 0
    Как я уже сказал, я хочу, чтобы фильтрация была внутри моего контроллера, а не в поле зрения.
  • 0
    Я обновил ответ, чтобы включить пример с $ filter в контроллере. Это то же самое, что может взять предмет.
1

Подобно тому, как вы каскадируете свои фильтры в разметке, просто каскадируйте их в своем контроллере:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню