2016-06-16 86 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测试版


角RC版本的代码如下:

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

现在我看到这个问题,非常感谢,也与我的过滤代码,我改变了数组来对象和它的作品 –