Ich verwende Pipes in Angular 2+, um Arrays von Objekten zu filtern. Im Folgenden werden mehrere Filterargumente verwendet, Sie können jedoch nur eines senden, wenn dies Ihren Anforderungen entspricht. Hier ist ein StackBlitz-Beispiel . Es findet die Schlüssel, nach denen Sie filtern möchten, und filtert dann nach dem von Ihnen angegebenen Wert. Es ist eigentlich ganz einfach. Wenn es kompliziert klingt, sehen Sie sich das StackBlitz-Beispiel an .
Hier ist die Pipe, die in einer * ngFor-Direktive aufgerufen wird.
<div *ngFor='let item of items | filtermulti: [{title:"mr"},{last:"jacobs"}]' >
Hello {{item.first}} !
</div>
Hier ist die Pfeife,
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filtermulti'
})
export class FiltermultiPipe implements PipeTransform {
transform(myobjects: Array<object>, args?: Array<object>): any {
if (args && Array.isArray(myobjects)) {
// copy all objects of original array into new array of objects
var returnobjects = myobjects;
// args are the compare oprators provided in the *ngFor directive
args.forEach(function (filterobj) {
let filterkey = Object.keys(filterobj)[0];
let filtervalue = filterobj[filterkey];
myobjects.forEach(function (objectToFilter) {
if (objectToFilter[filterkey] != filtervalue && filtervalue != "") {
// object didn't match a filter value so remove it from array via filter
returnobjects = returnobjects.filter(obj => obj !== objectToFilter);
}
})
});
// return new array of objects to *ngFor directive
return returnobjects;
}
}
}
Und hier ist die Komponente, die das zu filternde Objekt enthält:
import { Component } from '@angular/core';
import { FiltermultiPipe } from './pipes/filtermulti.pipe';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
items = [{ title: "mr", first: "john", last: "jones" }
,{ title: "mr", first: "adrian", last: "jacobs" }
,{ title: "mr", first: "lou", last: "jones" }
,{ title: "ms", first: "linda", last: "hamilton" }
];
}
StackBlitz Beispiel
GitHub-Beispiel: Geben Sie hier eine Arbeitskopie dieses Beispiels ein
*Bitte beachten Sie dass Gunter in einer Antwort von Gunter angibt, dass Arrays nicht mehr als Filterschnittstellen verwendet werden, aber ich habe den von ihm bereitgestellten Link durchsucht und nichts gefunden, was zu dieser Behauptung spricht. Das bereitgestellte StackBlitz-Beispiel zeigt auch, dass dieser Code wie in Angular 6.1.9 vorgesehen funktioniert. Es wird in Angular 2+ funktionieren.
Viel Spaß beim Codieren :-)