2017-02-22 20 views

ответ

10

Планета не требуется!

два возможных пути:

  • использовать функцию фильтра и имеют отфильтрованный массив данных
@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <input (keyup)="search($event.target.value)" /> 
     <div *ngFor="let d of filteredData"> 
     {{ d }} 
     </div> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    data = [ 
    "val1", 
    "val2", 
    "val3", 
    "val4", 
    "val5", 
    "val6", 
    "test", 
    "huhu" 
    ]; 
    filteredData = this.data; 

    constructor() { 
    this.name = 'Angular2' 
    } 

    search(val: any) { 
    if (!val) this.filteredData = this.data; 

    this.filteredData = this.data.filter(d => d.indexOf(val) >= 0); 
    } 
} 

жить демо (лучше производительность!): https://plnkr.co/edit/9NtT6Z4RIg4BR1BVfh7r?p=preview

  • или с использованием Pipe
@Pipe({ name: 'filter' }) 
export class FilterPipe implements PipeTransform { 
    public transform(values: any[], filter: string): any[] { 
    if (!values || !values.length) return []; 
    if (!filter) return values; 

    return values.filter(v => v.indexOf(filter) >= 0); 
    } 
} 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <input [(ngModel)]="filterString" /> 
     <div *ngFor="let d of (data | filter: filterString)"> 
     {{ d }} 
     </div> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    data = [ 
    "val1", 
    "val2", 
    "val3", 
    "val4", 
    "val5", 
    "val6", 
    "test", 
    "huhu" 
    ]; 

    filterString = ''; 

    constructor() { 
    this.name = 'Angular2' 
    } 
} 

демо: https://plnkr.co/edit/usgvA1hpqQ06zJxMrx4f?p=preview

+0

Привет Mxii, wouln't фильтр причиной его фильтровать список каждый раз, когда кайф обнаружения изменения? – Abhi