Ответ 1
Да, возможно сделать фильтр ИЛИ, но после поиска в исходном коде ng-grid я не вижу, как это можно сделать, используя их filterOptions.filterText
. Это может делать только фильтрация AND.
Тогда решение будет использовать filterOptions.useExternalFilter:true
Я также не нашел примеров, но, немного поиграв с этим, я понял, что фильтр действительно выполняется путем повторного создания массива gridOptions.data
object |. Это единственный недостаток этого фильтра.
Итак, в основном ваш код будет выглядеть как index.html:
<body ng-controller="MyCtrl">
<strong>Filter Name:</strong> </string><input type="text" ng-model="filterName"/>
</br>
OR
</br>
<strong>Filter Age:</strong> </string><input type="text" ng-model="filterAge"/>
</br>
<button ng-click="activateFilter()">Run Filter</button>
<br/>
<br/>
<div class="gridStyle" ng-grid="gridOptions"></div>
</body>
И в вашем controller.js:
app.controller('MyCtrl', function($scope) {
$scope.filterOptions = {
filterText: '',
useExternalFilter: true
};
$scope.activateFilter = function() {
var name = $scope.filterName || null;
var age = ($scope.filterAge) ? $scope.filterAge.toString() : null;
if (!name && !age) name='';
$scope.myData = angular.copy($scope.originalDataSet, []);
$scope.myData = $scope.myData.filter( function(item) {
return (item.name.indexOf(name)>-1 || item.age.toString().indexOf(age) > -1);
});
};
$scope.originalDataSet = [{name: "Moroni", age: 50},
{name: "Tiancum", age: 43},
{name: "Jacob", age: 27},
{name: "Nephi", age: 29},
{name: "Enos", age: 34}];
$scope.myData = angular.copy($scope.originalDataSet, []);
$scope.gridOptions = {
data: 'myData',
filterOptions: $scope.filterOptions
};
});
Это просто базовая фильтрация (используйте регулярное выражение и/или конвертируйте в нижний регистр для лучшего соответствия). Также обратите внимание, что если оба имени и возраста пустые, я устанавливаю имя как '', а затем каждый элемент возвращает true внутри фильтра (в результате возвращается весь набор данных).
Этот параметр намного лучше подходит для динамического набора данных (с поддержкой чтения - сервера), но он работает так же хорошо, но реплицирует исходный набор данных и применяет к нему фильтры.