Ich habe einen Repeater, die ich durch den Text filtern müssen, in ein Textfeld eingegeben, so dass ich habe dieseAngularJS Filter Repeater mit mehreren Werten
<tr ng-repeat="i in filteredItems = (iso3166 | filter: {alpha_2: countryQuery})">
Die Daten erfolgt eine json Array von Objekten, $ 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"
}, ...
So können Sie "af" und die Tabellen Filter Afghanistan zu zeigen.
Jetzt muss ich haben, was in das Feld return passt nicht nur gegen den alpha_2
Schlüssel eingegeben wird, sondern auch die name
eins. Zum Beispiel sollte "af" nicht nur "Afghanistan", sondern auch "Zentralafrikanische Republik" entsprechen.
Ich schaute auf die Angular 1.4.1 Docs und sah die Komma-Methode, aber es scheint einen UND-Vergleich durchzuführen. Wie in
<tr ng-repeat="i in filteredItems = (iso3166 | filter: {alpha_2: countryQuery, name: countryQuery })">
Gibt es eine Möglichkeit ein „oder“ in diesem Fall zu tun, so dass alles, was Filter auf alle Elemente eingegeben wird, in dem die Abfrage in „alpha_2“ ist oder „name“?
UPDATE: Wenn jemand neugierig ist, gewickelt ich einen Filter verwenden, wie unten in einer Antwort vorgeschlagen:
$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;
};
Haben Sie versucht: 'i in filteredItems | filter: countryQuery'? – theblindprophet
ja, aber das wird mit jedem Feld übereinstimmen. Ich möchte zum Beispiel "region: Africa" nicht mit "af" vergleichen. Nur die Felder "alpha_2" oder "name". – Steve