Essayer d'écrire un tuyau personnalisé pour cacher certains éléments.
import { Pipe } from '@angular/core'; // Tell Angular2 we're creating a Pipe with TypeScript decorators @Pipe({ name: 'showfilter' }) export class ShowPipe { transform(value) { return value.filter(item => { return item.visible == true; }); } }
HTML
<flights *ngFor="let item of items | showfilter"> </flights>
COMPOSANT
import { ShowPipe } from '../pipes/show.pipe'; @Component({ selector: 'results', templateUrl: 'app/templates/results.html', pipes: [PaginatePipe, ShowPipe] })
Mon objet a la propriété de visible, ce qui peut être vrai ou faux.
Cependant, rien ne montre, est-ce qu'il y a un problème avec ma pipe?
Je pense que mon tuyau fonctionne parce que lorsque je change le code du tuyau pour:
import { Pipe } from '@angular/core'; // Tell Angular2 we're creating a Pipe with TypeScript decorators @Pipe({ name: 'showfilter' }) export class ShowPipe { transform(value) { return value; } }
Il affichera tous les éléments.
Merci
Je suis plutôt sûr que c'est parce que vous avez une valeur initiale de []
pour les items
. Lorsque vous ajoutez plus tard des éléments aux items
, le tuyau n'est pas ré-excédé.
Ajouter pure: false
devrait le réparer:
@Pipe({ name: 'showfilter', pure: false }) export class ShowPipe { transform(value) { return value.filter(item => { return item.visible == true; }); } }
pure: false
a un impact majeur. Une telle conduite est appelée chaque fois que les opérations de détection de changement, ce qui est assez souvent.
Une façon de faire appel à un tuyau pur est de modifier réellement la valeur d'entrée.
Si tu fais
this.items = this.items.slice(); // create a copy of the array
Chaque fois que les items
été modifiés (ajoutés / enlevés), Angular reconnaît la modification et ré-exécute le tuyau.