Dans Angular 2, nous n'avons pas de filtre prédéfini et de commande par comme c'était le cas avec AngularJs, nous devons les créer pour nos besoins. C'est une perte de temps mais nous devons le faire, (voir No FilterPipe ou OrderByPipe). Dans cet article, nous allons voir comment nous pouvons créer un filtre appelé pipe dans Angular 2 et une fonction de tri appelée Order By. Utilisons un simple tableau de données json factice pour cela. Voici le json que nous allons utiliser pour notre exemple
Nous allons d'abord voir comment utiliser le tuyau (filtre) en utilisant la fonction de recherche :
Créer un composant avec le nom category.component.ts
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-category',
templateUrl: './category.component.html'
})
export class CategoryComponent implements OnInit {
records: Array<any>;
isDesc: boolean = false;
column: string = 'CategoryName';
constructor() { }
ngOnInit() {
this.records= [
{ CategoryID: 1, CategoryName: "Beverages", Description: "Coffees, teas" },
{ CategoryID: 2, CategoryName: "Condiments", Description: "Sweet and savory sauces" },
{ CategoryID: 3, CategoryName: "Confections", Description: "Desserts and candies" },
{ CategoryID: 4, CategoryName: "Cheeses", Description: "Smetana, Quark and Cheddar Cheese" },
{ CategoryID: 5, CategoryName: "Grains/Cereals", Description: "Breads, crackers, pasta, and cereal" },
{ CategoryID: 6, CategoryName: "Beverages", Description: "Beers, and ales" },
{ CategoryID: 7, CategoryName: "Condiments", Description: "Selishes, spreads, and seasonings" },
{ CategoryID: 8, CategoryName: "Confections", Description: "Sweet breads" },
{ CategoryID: 9, CategoryName: "Cheeses", Description: "Cheese Burger" },
{ CategoryID: 10, CategoryName: "Grains/Cereals", Description: "Breads, crackers, pasta, and cereal" }
];
// this.sort(this.column);
}
}
<div class="col-md-12">
<table class="table table-responsive table-hover">
<tr>
<th >Category ID</th>
<th>Category</th>
<th>Description</th>
</tr>
<tr *ngFor="let item of records">
<td>{{item.CategoryID}}</td>
<td>{{item.CategoryName}}</td>
<td>{{item.Description}}</td>
</tr>
</table>
</div>
Rien de spécial dans ce code, il suffit d'initialiser notre variable records avec une liste de catégories, deux autres variables isDesc et column sont déclarées, que nous utiliserons pour le tri. A la fin, nous ajoutons this.sort(this.column) ; nous utiliserons cette dernière, une fois que nous aurons cette méthode.
Notez le templateUrl : './category.component.html', que nous allons créer ensuite pour afficher les enregistrements sous forme de tableaux.
Pour cela, créez une page HTML appelée category.component.html, avec le code suivant :
Ici nous utilisons ngFor pour répéter les enregistrements et les montrer ligne par ligne, essayez de l'exécuter et nous pouvons voir tous les enregistrements dans un tableau.
Recherche - Filtrer les enregistrements
Disons que nous voulons rechercher le tableau par nom de catégorie, pour cela ajoutons une zone de texte pour taper et rechercher
<div class="form-group">
<div class="col-md-6" >
<input type="text" [(ngModel)]="searchText"
class="form-control" placeholder="Search By Category" />
</div>
</div>
Maintenant, nous devons créer un tuyau pour rechercher le résultat par catégorie parce que le filtre n'est pas disponible comme il l'était dans angularjs plus.
Créez un fichier category.pipe.ts et ajoutez-y le code suivant.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'category' })
export class CategoryPipe implements PipeTransform {
transform(categories: any, searchText: any): any {
if(searchText == null) return categories;
return categories.filter(function(category){
return category.CategoryName.toLowerCase().indexOf(searchText.toLowerCase()) > -1;
})
}
}
Ici, dans la méthode de transformation, nous acceptons la liste des catégories et le texte de recherche pour rechercher/filtrer les enregistrements de la liste. Importez ce fichier dans notre fichier category.component.ts, nous voulons l'utiliser ici, comme suit :
import { CategoryPipe } from './category.pipe';
@Component({
selector: 'app-category',
templateUrl: './category.component.html',
pipes: [CategoryPipe] // This Line
})
Notre boucle ngFor a maintenant besoin d'avoir notre Pipe pour filtrer les enregistrements, donc changez-le en ceci : vous pouvez voir le résultat dans l'image ci-dessous.
Entrez la description de l'image ici
1 votes
Vous pouvez créer un tuyau personnalisé pour cela, ce qui sera le mieux
1 votes
Pouvez-vous donner un exemple ?
0 votes
Vous pouvez utiliser ce regardez le titre de 'HeroSearchComponent', ou bien ce comme point de référence.
0 votes
C'est un excellent exemple, mais dans mon cas, je n'utilise pas le protocole HTTP. J'ai juste besoin de le filtrer dans le client après avoir reçu la liste des éléments sans réponse supplémentaire.