2017-05-23 3 views
0

Je filtrer les éléments à l'aide du tuyau pour filtrerfiltre de mise en œuvre tuyau de recherche

Mon entrée est déposé dans le fichier search.html et dans le fichier Liste de produits list.html

changement dans le modèle n'est pas déclencher la transformation du tuyau. S'il vous plaît aider. Voici l'extrait de code ci-dessous.

search.html

<input placeholder="keyword..." [(ngModel)]="search"/> 

list.html

<div *ngFor="let item of items | searchPipe:'name':search "> 
    {{item.name}} 
</div> 

Search.pipe.ts

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

@Pipe({ 
    name : 'searchPipe', 
}) 
export class SearchPipe implements PipeTransform { 
    public transform(value, key: string, term: string) { 
    return value.filter((item) => { 
     if (item.hasOwnProperty(key)) { 
     if (term) { 
      let regExp = new RegExp('\\b' + term, 'gi'); 
      return regExp.test(item[key]); 
     } else { 
      return true; 
     } 
     } else { 
     return false; 
     } 
    }); 
    } 
} 
+0

créé petit Plunk [link] (http://plnkr.co/edit/jcvOHHJuqjYWdFmlQZB0?p=preview) et votre code semble bien ... pouvez-vous vérifier la fonctionnalité? – chrystian

+0

Vous avez ajouté le champ de saisie de recherche dans le même modèle, cela fonctionnera. Mais le champ de saisie de recherche doit être dans un composant différent et remplir des éléments de liste dans un composant différent. – Sanjaybxl

+0

Pouvez-vous fourchette et ajuster mon plunk à ce que vous voulez qu'il soit? – chrystian

Répondre

2

Ok, d'après notre discussion et plunks je pense avoir une réponse . Au fond ce que vous manque une communication entre les composants

composant de recherche:

import { Component, Output, EventEmitter } from '@angular/core'; 

@Component({ 
    selector: 'my-search', 
    template: ` 
    <input placeholder="keyword..." [(ngModel)]="search" (keyup)=onChange()/> 
    ` 
}) 

export class SearchComponent { 
    search: String; 
    @Output() onSearchChange = new EventEmitter<Object>(); 

    onChange($event) { 
    this.onSearchChange.emit(this.search); 
    } 
} 

puis certains composant parent (avec liste)

import { Component } from '@angular/core'; 
import { SearchComponent } from './search.component'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <h1>Search pipe test</h1> 
    Search: <my-search (onSearchChange)="search = $event"></my-search> 
    <br/>  
    <br/> 
     <div *ngFor="let item of items | searchPipe:'name':search "> 
     {{item.name}} 
     </div> 
    ` 
}) 
export class AppComponent { 
    search: String; 
    items: Array<any> = [ 
    { id: 1, name: 'aaaaa' }, 
    { id: 2, name: 'bbbbb' }, 
    { id: 3, name: 'ccccc' }, 
    { id: 4, name: 'aabb' }, 
    { id: 5, name: 'bbcc' }, 
    ] 
} 

et travailler enfin Plunk: http://plnkr.co/edit/TzNQfDQ8K7d81ST9qKj5?p=preview

+0

merci de votre aide. – Sanjaybxl