2016-06-16 3 views
2

Я пытаюсь сделать фильтр в angular2, я сделал множество продуктов, как это:angular2 проблема фильтрации

private products = ["Apple", "Banana", "Orange"];

и вот мой фильтр трубы:

import {Pipe} from 'angular2/core'; 

@Pipe({name:'filter'}) 

export class FilterPipe { 
    transform(value, args) { 
     if(!args[0]){ 
      return value; 
     } 
     else if (value) { 
      return value.filter(item => { 
       for (let key in item){ 
        if((typeof item[key]==='string' || item[key] instanceof String) && (item[key].indexOf(args[0]) !== -1)){ 
         return true; 
        } 
       } 
      }); 
     } 
    } 
} 

В моей компонент Я добавил элемент ul для отображения продуктов и элемент input для их фильтрации:

<input type="text" [(ngModel)]="filterText"> 
       <ul> 
        <li *ngFor="#product of products | filter: filterText"> 
         {{product}} 
        </li> 
       </ul> 

Проблема при запуске этого кода заключается в том, что он работает только (фильтр) при вводе первой буквы, еще раз вводятся буквы, которые не будут работать. Любая помощь ?

ответ

2

Вы пытаетесь сравнить каждый символ строки из массива с введенным текстом

'A' => ('Apple') => 'A'.indexOf('A') 'p'.indexOf('A') ... 
'Ap' => ('Apple') => 'A'.indexOf('Ap') 'p'.indexOf('Ap') ... - always false 
'App' => ('Apple') => 'A'.indexOf('App') 'p'.indexOf('App') ... - always false 

Я хотел бы изменить трубу следующим образом:

@Pipe({name:'filter'}) 
export class FilterPipe { 
    transform(value, args) { 
    if(!args[0]) return value; 
    return value.filter(item => item.indexOf(args[0]) > -1); 
    } 
} 

https://plnkr.co/edit/TpJ6Zu8QovWINqx04KUY?p=preview

!! ! Это Угловое 2 Beta Version


Код для угловых версий RC будет выглядеть следующим образом:

@Pipe({ name: 'filter' }) 
export class FilterPipe { 
    transform(value, term) { 
    if (!term) return value; 
    return value.filter(item => item.indexOf(term) > -1); 
    } 
} 
+0

Теперь я вижу проблему, спасибо много, и с моим кодом фильтра я изменил массив для объекта, и он работает –

Смежные вопросы