2017-05-23 13 views
0

私はフィルタリングするためにパイプを使用してアイテムをフィルタリングしていフィルター検索パイプの実装

モデルではないに提出された私の入力は

変更を提出するlist.htmlでsearch.htmlのファイルとITEMLISTでありますパイプ変換をトリガする。 助けてください。以下はコードスニペットです。

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

小さなplunkを作成し、基本的に何が欠落していたことは部品

間の通信

検索コンポーネントであります[リンク](http://plnkr.co/edit/jcvOHHJuqjYWdFmlQZB0?p=preview)あなたのコードはうまくいくようです...機能を確認できますか? – chrystian

+0

検索入力フィールドを同じテンプレートに追加しました。これは動作します。しかし、検索入力フィールドは、別のコンポーネントにあり、別のコンポーネントのリスト項目を設定する必要があります。 – Sanjaybxl

+0

あなたは自分のしたいものに私の塊をフォークして調整できますか? – chrystian

答えて

2

[OK]を、私たちの議論とplunksに基づいて、私は答えを持っていると思います。 (リスト付き)

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); 
    } 
} 

その後、いくつかの親コンポーネント

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' }, 
    ] 
} 

し、最終的に取り組んでplunk:http://plnkr.co/edit/TzNQfDQ8K7d81ST9qKj5?p=preview

+0

助けてくれてありがとう。 – Sanjaybxl