Saya menggunakan Pipes di Angular 2+ untuk memfilter array objek. Berikut ini membutuhkan beberapa argumen filter tetapi Anda hanya dapat mengirim satu jika itu sesuai dengan kebutuhan Anda. Berikut adalah Contoh StackBlitz . Ini akan menemukan kunci yang ingin Anda filter dan kemudian filter dengan nilai yang Anda berikan. Ini sebenarnya cukup sederhana, jika kedengarannya rumit bukan, lihat Contoh StackBlitz .
Berikut adalah Pipa yang dipanggil dalam arahan * ngFor,
<div *ngFor='let item of items | filtermulti: [{title:"mr"},{last:"jacobs"}]' >
Hello {{item.first}} !
</div>
Ini Pipanya,
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;
}
}
}
Dan di sini adalah Komponen yang berisi objek untuk disaring,
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" }
];
}
Contoh StackBlitz
Contoh GitHub: Garpu salinan yang berfungsi dari contoh ini di sini
* Harap dicatat bahwa dalam jawaban yang diberikan oleh Gunter, Gunter menyatakan bahwa array tidak lagi digunakan sebagai antarmuka filter, tetapi saya mencari tautan yang disediakannya dan tidak menemukan apa pun yang berbicara dengan klaim itu. Juga, contoh StackBlitz yang diberikan menunjukkan kode ini berfungsi sebagaimana dimaksud dalam Angular 6.1.9. Ini akan bekerja di Angular 2+.
Selamat Coding :-)