angular - Angular2 Filtrera Data Från Lista


Jag utvecklar en Angular2-applikation med TypeScript. Jag behöver filtrera användare som motsvarar inmatningstextfältet.

Tabell efter filtrering av data

Inmatningsfält

Resultat

HTML-tabellvy users.html

<tr *ngFor='let user of Users'>
        <td>
            <img [src]='user.imageUrl' [title]='user.userName' [style.width.px]='imageWidth' [style.margin.px]='imageMargin'>
        </td>
        <td>{{ user.userName }}</td>
    </tr>

Användarlista user-list.componet.ts

export class UserListComponent implements OnInit {
    imageWidth: number = 50;
    imageMargin: number = 2;
    users: User[] = [
        {
            "productId": 2,
            "productName": "Njjosgaaj",
        }
    ];

    ngOnInit(): void {
        console.log('In OnInit');
    }
}

Användargränssnitt user.ts

export interface User {
    userId: number;
    userName: string;

}

Jag försökte utveckla detta med en anpassad Angular2-pipe. Jag undrar över utvecklingen? Vad är det bästa sättet att utveckla denna funktion?

Svar #1

Du kan använda en anpassad Angular-pipe för att filtrera användare.

Försök att lägga till den här typen av filter i din kod.

Skapa en ny fil som user-filter.ts och lägg till denna kod

import { PipeTransform, Pipe } from '@angular/core';

import { User } from './user';

@Pipe({
    name: 'productFilter'
})
export class UserFilterPipe implements PipeTransform {

    transform(value: User[], filterBy: string): User[] {
        filterBy = filterBy ? filterBy.toLocaleLowerCase() : null;
        return filterBy ? value.filter((user: User) =>
            user.userName.toLocaleLowerCase().indexOf(filterBy) !== -1) : value;
    }
}

Lägg till listFilter-attributet till UserListComponent

 export class UserListComponent implements OnInit {

        listFilter: string = 'cart';
        --------------
    }

Byt till HTML-visning

<tr *ngFor='let user of Users | userFilter:listFilter '>
        <td>
            <img [src]='user.imageUrl' [title]='user.userName' [style.width.px]='imageWidth' [style.margin.px]='imageMargin'>
        </td>
        <td>{{ user.userName }}</td>
    </tr>