Um mit mehreren tiefen Eigenschaften zu filtern, müssen wir benutzerdefinierte Filter erstellen. Was ich meine, müssen wir eine eigene Funktion erstellen, um die Daten in Objekt zu filtern und das erforderliche Objekt (gefiltertes Objekt) zurückzugeben.
Zum Beispiel muss ich zum Filtern von Daten von unten Objekt -
[
{
"document":{
"documentid":"1",
"documenttitle":"test 1",
"documentdescription":"abcdef"
}
},
{
"document":{
"documentid":"2",
"documenttitle":"dfjhkjhf",
"documentdescription":"dfhjshfjdhsj"
}
}
]
In HTML wir ng-Wiederholung zeigen Dokumentenliste verwenden -
<div>
//search input textbox
<input ng-model="searchDocument" placeholder="Search">
</div>
<div ng-repeat="document in documentList | filter: filteredDocument">
//our html code
</div>
In-Controller schreiben wir Filterfunktion zurückzukehren gefiltertes Objekt unter Verwendung von zwei Eigenschaften des Objekts, die "Dokumenttitel" und "Dokumentbeschreibung" sind, ist das Codebeispiel wie folgt:
function filterDocuments(document)
{
if($scope.searchDocument)
{
if(document.documentTitle.toLowerCase().indexOf($scope.searchDocument.toLowerCase()) !== -1 || document.document.shortDescription.toLowerCase().indexOf($scope.searchDocument.toLowerCase()) !== -1)
{
//returns filtered object
return document
}
}else {
return document;
}
}
Dabei ist $ scope.searchDocument die Bereichsvariable, die an das Such-Textfeld gebunden ist (HTML-Eingabe-Tag), in das der Benutzer den zu suchenden Text eingeben kann.
Wenn einige Objekte keine Manager Eigenschaft haben, werden sie nicht angezeigt, auch wenn der Filter leer ist. Weißt du, wie man sie einbeziehen kann? – Bludwarf
Was passiert, wenn Name ein Array ist und ich nur den Vornamen filtern möchte? – rocketspacer
@Bludwarf http://pnnr.co/edit/dMbYapbySJMGKiykvpG7?p=preview vielleicht kann dies jemandem helfen – ANinJa