У меня есть ретранслятор, который мне нужно отфильтровать текст, введенный в текстовое поле, так что я сделал этоAngularJS фильтр ретранслятор с несколькими значениями
<tr ng-repeat="i in filteredItems = (iso3166 | filter: {alpha_2: countryQuery})">
данные являются JSON массив объектов, $ scope.iso3166:
[{
"name": "Afghanistan",
"alpha_2": "AF",
"alpha_3": "AFG",
"country-code": "004",
"iso_3166-2": "ISO 3166-2:AF",
"region": "Asia",
"sub-region": "Southern Asia",
"region-code": "142",
"sub-region-code": "034",
"license": "unclassified",
"prohibited": "unclassified",
"size": "unclassified"
}, ...
Таким образом, вы можете набрать «af» и таблицы фильтров, чтобы показать Афганистан.
Теперь мне нужно иметь то, что набрано в поле, соответствует совпадениям не только с ключом alpha_2
, но и с name
. Например, «аф» должен соответствовать не только «Афганистану», но и «Центральноафриканской Республике».
Я просмотрел документы с угловым 1.4.1 и увидел метод запятой, но, похоже, он выполняет сравнение И. Как и в
<tr ng-repeat="i in filteredItems = (iso3166 | filter: {alpha_2: countryQuery, name: countryQuery })">
Есть ли способ сделать сделать «или» в данном случае, так что все, что набирается фильтров любых элементов, где запрос находится в «alpha_2» или «имя»?
UPDATE: Если кому-то интересно, я завелся с помощью фильтра, как это предлагается в ответ ниже:
$scope.countryFilter = function (value) {
if (angular.isUndefined($scope.countryQuery) || $scope.countryQuery === '') {
return true;
}
return value.name.indexOf($scope.countryQuery) >= 0 || value.alpha_2.indexOf($scope.countryQuery) >= 0;
};
Вы пробовали: 'я в filteredItems | фильтр: countryQuery'? – theblindprophet
Да, но это будет соответствовать любому полю. Например, я не хочу сопоставлять «регион: Африка» с «af». Просто поля «alpha_2» или «name». – Steve