Ich versuche etwas zu tun wie:
<div ng-controller="TestCtrl">
<div ng-repeat="(k,v) in items | filter:hasSecurityId">
{{k}} {{v.pos}}
</div>
</div>
AngularJs Teil:
function TestCtrl($scope)
{
$scope.items = {
'A2F0C7':{'secId':'12345', 'pos':'a20'},
'C8B3D1':{'pos':'b10'}
};
$scope.hasSecurityId = function(k,v)
{
return v.hasOwnProperty('secId');
}
}
Aber irgendwie zeigt es mir alle Gegenstände. Wie kann ich filtern (Schlüssel, Wert)?
Antworten:
Winkel Filter können nur auf Arrays und nicht Objekte angewendet werden, von Winkel API -
Hier haben Sie zwei Möglichkeiten:
1) Verschieben
$scope.items
in ein Array oder -2) Vorfiltern der
ng-repeat
Elemente wie folgt:Und auf dem Controller:
jsfiddle : http://jsfiddle.net/bmleite/WA2BE/
quelle
Meine Lösung wäre, einen benutzerdefinierten Filter zu erstellen und diesen zu verwenden:
Und in HTML:
quelle
Sie können auch verwenden
ng-repeat
mitng-if
:quelle
Oder einfach benutzen
Die aktualisierte Lösung finden Sie hier:
http://jsfiddle.net/RFontana/WA2BE/93/
quelle
ng-if
stattdessen mitSie können einfach das Modul angle.filter verwenden und dann sogar nach verschachtelten Eigenschaften filtern.
siehe: jsbin
2 Beispiele:
JS:
HTML:
quelle
angular.filter
kein Kernwinkelmodul ist und Sie der Autor davon sind.toArray
Filter nicht mehr vorhanden ist. Gibt es einen Ersatz, weil derfilter
Filter immer noch keine Objekte zulässt?Es ist etwas spät, aber ich habe nach einem ähnlichen Filter gesucht und so etwas beendet:
quelle
Obwohl diese Frage ziemlich alt ist, möchte ich meine Lösung für Entwickler von Angular 1 teilen. Der Punkt ist, nur den ursprünglichen Winkelfilter wiederzuverwenden, aber alle Objekte transparent als Array zu übergeben.
benutze es so:
Hier ist ein Plunker
quelle
Ich habe ein bisschen mehr von einem generischen Filter gemacht, den ich bereits in mehreren Projekten verwendet habe:
HTML:
JS:
quelle